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