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

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

מחובר פיזית

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

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

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

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

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

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

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

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

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