חיבור של מכשיר חדש מפעיל סדרה של אירועים אסינכרוניים שלא ברור מה הם, אבל כדאי להבין אותם.
מחובר פיזית
Tradefed משתמש בספריית ddmlib (ספריית Java adb) כדי לספק את האינטראקציה הבסיסית עם adb ומכשירים. חלק מהפתרון הזה הוא ממשק IDeviceChangeListener שמאפשר לקבל אירועים חדשים של מכשירים, כמו:
deviceConnected: כשמכשיר חדש מזוהה על ידיadbdeviceDisconnected: כשמכשיר מפסיק לשלוח דיווחים אלadb-
deviceChanged: כשמתרחש מצב מכשיר משמעותי (כמו מכשיר אופליין או מכשיר אונליין)
האירועים האלה מספיקים ברמה של adb כדי להחליט אם מכשיר מחובר, אונליין או אופליין. אבל כדי להריץ את חבילת הבדיקה, אנחנו צריכים מצב חזק יותר כדי לוודא שהמכשיר באמת מוכן להתחיל להריץ בדיקות. המצב לא צריך להיות מושפע מחוסר יציבות פוטנציאלי במצב שיכול להתרחש במכשיר שמחובר לאחרונה.
זהו רצף האירועים ב-Tradefed:
- המכשיר מזוהה כ-
deviceConnectedופתוח לאירועים רגילים מ-adb נוצר אירוע פנימי של Tradefed שיבצע את הפעולות הבאות:
- בודקים אם המכשיר כבר מוכר. מערכת Tradefed שומרת הפניה פנימית למכשירים מסוימים (במיוחד למכשיר שהוקצה כרגע ומריץ בדיקות) כדי למנוע מצב שבו המערכת מאבדת את המעקב אחריהם באופן אקראי.
- בודקים אם המכשיר הוא
ONLINEאוOFFLINE.
אם המכשיר הוא:
OFFLINE: המכשיר יעבור למצב TradefedCONNECTED_OFFLINE, שעדיין לא מאפשר להריץ בדיקות במכשיר. אם המכשיר יהיה אונליין בהמשך, הוא יעבור את מחזור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 הבסיסי, כך שהבדיקה יכולה להימשך בהפניה המתאימה. הפעולה הזו מתבצעת בצורה חלקה בכל פעם שמנתקים מכשיר או מחברים אותו מחדש (לדוגמה, במהלך הפעלה מחדש).