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