חיבור של מכשיר חדש מפעיל סדרה של אירועים אסינכרונים שלא ברורים לכולם, אבל כדאי להבין אותם.
חיבור פיזי
Tradefed משתמש בספרייה ddmlib
(ספריית adb
של Java) כדי לספק את האינטראקציה הבסיסית עם adb
ועם מכשירים. חלק מהפתרון הוא ממשק IDeviceChangeListener שמאפשר לקבל אירועים חדשים של המכשיר, כמו:
deviceConnected
: כשמכשיר חדש נראה על ידיadb
deviceDisconnected
: כשמכשיר לא מדווח יותר ל-adb
deviceChanged
: כשמתרחש שינוי במצב המכשיר (למשל, המכשיר אופליין או המכשיר אונליין)
האירועים האלה מספיקים ברמה adb
כדי לקבוע אם מכשיר מחובר, אונליין או אופליין. אבל לצורך ערכת הבדיקה, אנחנו צריכים מצב חזק יותר כדי לוודא שהמכשיר מוכן באמת להתחיל להריץ בדיקות. המצב לא אמור להיות מושפע מתנודות פוטנציאליות במצב שיכולות להתרחש במכשיר שמחובר לאחרונה.
זהו רצף האירועים ב-Tradefed:
- המכשיר מזוהה בתור
deviceConnected
ופתוח לאירועים רגילים מ-adb
נוצר אירוע פנימי ב-Tradefed ש:
- בודקים אם המכשיר כבר ידוע. ב-Tradefed יש הפניה פנימית למכשירים מסוימים (במיוחד למכשיר שהוקצה כרגע שבו פועלים הבדיקות) כדי למנוע מ-TF לאבד את המעקב אחריהם באופן אקראי.
- בודקים אם המכשיר הוא
ONLINE
אוOFFLINE
.
אם המכשיר:
OFFLINE
: המכשיר יועבר למצבCONNECTED_OFFLINE
של Tradefed, שבו עדיין אי אפשר להריץ בו בדיקות. אם המכשיר יחזור לאינטרנט מאוחר יותר, הוא יעבור את המחזור שלONLINE
. אם נקבל אירועdeviceDisconnect
, המכשיר יוסר מהרשימה.ONLINE
(כפי שמוצג ב-adb): המכשיר יועבר למצבCONNECTED_ONLINE
והזמינות שלו לצורך הקצאת בדיקה תבדק:checking_availability
.
אם הבדיקה של
availability
תסתיים בהצלחה, המכשיר יוגדר כזמין להקצאת בדיקות, ויהיה אפשר להריץ בו בדיקות. אם לא, המכשיר יסומן כ-unavailable
לצורך הקצאה ולא יוכל לקבל בדיקות.
כל המצבים האלה מופיעים במסוף Tradefed כשמציגים את המכשירים דרך: tf> list devices
חשוב לציין שכאשר המכשיר מוקצה לבדיקה, רוב האירועים שמפורטים למעלה לא מתרחשים, ו-Tradefed קובע את מצב המכשיר באופן פנימי. לכן, יכול להיות שמכשיר ייעלם מ-adb devices
אבל עדיין יופיע ב-Tradefed. מצב כזה יכול לקרות, למשל, כשבדיקה מפעילה מחדש את המכשיר.
מכשיר וירטואלי שמחובר באמצעות adb connect
כשיוצרים מכשיר וירטואלי מרוחק, Tradefed מתחבר אליו באמצעות adb
connect
. בדרך כלל, הפעולה הזו תגרום להצגת המכשיר ב-adb devices
בתור <some ip>:<port number>
, והיא תתבצע באותה רצף כמו במכשירים שמחוברים פיזית.
מעקב אחר המכשיר כשמתרחש אירוע deviceConnected
כשהאירוע deviceConnected
מתרחש, ddmlib
יוצר הפניה חדשה מסוג IDevice כדי לעקוב אחרי המכשיר המחובר החדש.
Tradefed משתמש בהפניה הזו ומעביר אותה להטמעה משלו של ממשק המכשיר ITestDevice כדי לספק שירות מתקדם יותר. אבל מכשיר ה-IDevice הבסיסי הוא תמיד זה שמגיע מ-ddmlib
.
כלומר, אם מחובר מכשיר חדש, נוצר אובייקט ITestDevice חדש שמשויך לאובייקט IDevice. אם זה קורה במהלך קריאה והמכשיר הוא ITestDevice, עדיין מתבצע החלפה של IDevice הבסיסי כדי שהבדיקה תמשיך בהפניה המתאימה. הפעולה הזו מתבצעת בצורה חלקה בכל פעם שמנתקים או מחברים מחדש מכשיר (לדוגמה, במהלך הפעלה מחדש).