تشخیص دستگاه در 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 برای تخصیص علامت‌گذاری می‌شود و نمی‌تواند هیچ آزمایشی را دریافت کند.

همه این وضعیت‌ها هنگام فهرست کردن دستگاه‌ها ازطریق tf> list devices در کنسول Tradefed منعکس می‌شود

توجه به این نکته مهم است که وقتی دستگاه درحال‌حاضر برای آزمایشی اختصاص داده شده است، بیشتر موارد بالا رخ نخواهد داد و 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 زیرین همچنان جایگزین می‌شود تا آزمایش بتواند با مرجع مناسب ادامه یابد. این کار هر بار که دستگاهی قطع/وصل می‌شود (برای مثال، درطول بازراه‌اندازی) به‌طور یکپارچه انجام می‌شود.