يؤدي ربط جهاز جديد إلى تشغيل سلسلة من الأحداث غير المتزامنة التي لا تبدو واضحة ولكنها تستحق الفهم.
متصلة فعليًا
يستخدم Tradefed مكتبة ddmlib
(وهي مكتبة adb
Java) لتوفير التفاعل الأساسي مع adb
والأجهزة. يتضمّن هذا الحل
واجهة IDeviceChangeListener
التي تتيح تلقّي أحداث الأجهزة الجديدة، مثل:
deviceConnected
: عندما يرصدadb
جهازًا جديدًاdeviceDisconnected
: عندما يتوقف الجهاز عن إرسال البيانات إلىadb
deviceChanged
: عند حدوث حالة رئيسية للجهاز (مثل عدم توفّر الجهاز أو توفّره)
تكون هذه الأحداث كافية على مستوى adb
لتحديد ما إذا كان الجهاز متصلاً أو غير متصل بالإنترنت. ولكن بالنسبة إلى أداة الاختبار، نحتاج إلى حالة أقوى من هذه لضمان أنّ الجهاز جاهز حقًا لبدء إجراء الاختبارات، ويجب ألا يتأثر الجهاز بأي مشاكل محتملة في الحالة قد تحدث عند توصيل جهاز جديد.
في ما يلي تسلسل الأحداث في Tradefed:
- الجهاز معرَّف على أنّه
deviceConnected
ومتاح للأحداث المنتظمة منadb
يتم إنشاء حدث Tradefed داخلي سيؤدي إلى ما يلي:
- تحقَّق مما إذا كان الجهاز معروفًا من قبل، إذ يحتفظ Tradefed بمرجع داخلي لبعض الأجهزة (خاصةً الجهاز المخصّص حاليًا والذي يتم تشغيل الاختبارات عليه) لتجنُّب فقدان TF لتتبُّعها بشكل عشوائي.
- تحقَّق مما إذا كان الجهاز
ONLINE
أوOFFLINE
.
إذا كان الجهاز:
OFFLINE
: سيتم تبديل الجهاز إلى حالةCONNECTED_OFFLINE
في Tradefed، التي لا تسمح للجهاز بتنفيذ الاختبارات بعد. إذا اتصل الجهاز بالإنترنت لاحقًا، سيخضع لدورة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 الأساسي حتى يمكن إجراء الاختبار على المرجع المناسب. ويتم ذلك بسلاسة في كل مرة يتم فيها قطع اتصال جهاز أو إعادة ربطه (على سبيل المثال، أثناء إعادة التشغيل).