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