تشخیص دستگاه در Tradefed

اتصال دستگاه جدید باعث ایجاد یک سری رویدادهای ناهمزمان می شود که واضح نیستند اما ارزش درک آن را دارند.

از نظر فیزیکی متصل است

Tradefed از کتابخانه ddmlib (یک کتابخانه جاوا 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 وضعیت دستگاه را به صورت داخلی تعیین می کند. بنابراین ممکن است یک دستگاه در حالی که هنوز توسط Tradefed لیست شده است از adb devices ناپدید شود. برای مثال زمانی که یک تست در حال راه اندازی مجدد دستگاه است، این اتفاق می افتد.

دستگاه مجازی متصل به adb connect

هنگامی که یک دستگاه مجازی راه دور ایجاد می شود، Tradefed با استفاده از adb connect به آن متصل می شود. این معمولاً باعث می‌شود که دستگاه در adb devices به‌عنوان <some ip>:<port number> نشان داده شود و همان ترتیب دستگاه‌های متصل فیزیکی را دنبال می‌کند.

ردیابی دستگاه هنگامی که یک رویداد deviceConnected رخ می دهد

هنگامی که deviceConnected رخ می دهد، ddmlib یک IDevice مرجع جدید برای ردیابی دستگاه تازه متصل ایجاد می کند.

Tradefed از آن مرجع استفاده می‌کند و آن را در پیاده‌سازی رابط دستگاه ITestDevice برای ارائه خدمات پیشرفته‌تر قرار می‌دهد. اما IDevice اساسی همیشه همانی است که از ddmlib می آید.

این بدان معناست که اگر یک دستگاه جدید متصل شود، یک ITestDevice جدید ایجاد شده و با IDevice مرتبط می شود. هنگامی که این اتفاق در طول فراخوانی رخ می دهد و ITestDevice در حال استفاده است، IDevice زیربنایی هنوز جایگزین می شود تا آزمایش بر روی مرجع مناسب ادامه یابد. هر بار که یک دستگاه قطع/وصل می شود (به عنوان مثال، در حین راه اندازی مجدد) این کار به طور یکپارچه انجام می شود.