كشف الجهاز في 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 الأساسي حتى يمكن متابعة الاختبار على المرجع المناسب. ويتم ذلك بسلاسة في كل مرة يتم فيها فصل/إعادة توصيل الجهاز (على سبيل المثال، أثناء إعادة التشغيل).