זיהוי מכשירים ב-Tradefed

חיבור של מכשיר חדש מפעיל סדרה של אירועים אסינכרונים שלא ברורים לכולם, אבל כדאי להבין אותם.

חיבור פיזי

‏Tradefed משתמש בספרייה ddmlib (ספריית Java adb) כדי לספק את האינטראקציה הבסיסית עם adb ועם מכשירים. חלק מהפתרון הוא ממשק IDeviceChangeListener שמאפשר לקבל אירועים חדשים של המכשיר, כמו:

  • deviceConnected: כשמכשיר חדש נראה על ידי adb
  • deviceDisconnected: כשמכשיר לא מדווח יותר ל-adb
  • deviceChanged: כשמתרחש שינוי במצב המכשיר (למשל, המכשיר אופליין או המכשיר אונליין)

האירועים האלה מספיקים ברמה adb כדי לקבוע אם מכשיר מחובר, אונליין או אופליין. אבל לצורך ערכת הבדיקה, אנחנו צריכים מצב חזק יותר כדי לוודא שהמכשיר מוכן באמת להתחיל להריץ בדיקות. המצב לא אמור להיות מושפע מתנודות פוטנציאליות במצב שיכולות להתרחש במכשיר שמחובר לאחרונה.

זהו רצף האירועים ב-Tradefed:

  1. המכשיר מזוהה כ-deviceConnected ופתוח לאירועים רגילים מ-adb
  2. נוצר אירוע פנימי ב-Tradefed ש:

    • בודקים אם המכשיר כבר ידוע. ב-Tradefed יש הפניה פנימית למכשירים מסוימים (במיוחד למכשיר שהוקצה כרגע שבו פועלים הבדיקות) כדי למנוע מ-TF לאבד את המעקב אחריהם באופן אקראי.
    • בודקים אם המכשיר הוא ONLINE או OFFLINE.
  3. אם המכשיר:

    • OFFLINE: המכשיר יוחלף למצב CONNECTED_OFFLINE עם נתונים מסחריים, שלא מאפשר למכשיר עדיין להריץ בדיקות. אם המכשיר יחזור לאינטרנט מאוחר יותר, הוא יעבור את המחזור של ONLINE. אם נקבל אירוע deviceDisconnect, המכשיר פשוט יוסר מהרשימה.

    • ONLINE (כפי שמוצג ב-adb): המכשיר יועבר למצב CONNECTED_ONLINE והזמינות שלו לצורך הקצאת בדיקה תבדוק: checking_availability.

  4. אם הבדיקה של 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 המקורי עדיין מוחלף כדי שהבדיקה תוכל להמשיך בהפניה הנכונה. הפעולה הזו מתבצעת בצורה חלקה בכל פעם שמנתקים או מחברים מחדש מכשיר (לדוגמה, במהלך הפעלה מחדש).