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

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

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

ردیابی دستگاه هنگام وقوع رویداد deviceConnected

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

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

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