اتصال دستگاه جدید باعث ایجاد یک سری رویدادهای ناهمزمان می شود که واضح نیستند اما ارزش درک آن را دارند.
از نظر فیزیکی متصل است
Tradefed از کتابخانه ddmlib (یک کتابخانه جاوا adb ) برای ارائه تعامل اولیه با adb و دستگاه ها استفاده می کند. بخشی از این راه حل رابط IDeviceChangeListener است که امکان دریافت رویدادهای جدید دستگاه مانند:
-
deviceConnected: هنگامی که یک دستگاه جدید توسطadbمشاهده می شود -
deviceDisconnected: وقتی دستگاهی دیگر بهadbگزارش نمی دهد -
deviceChanged: هنگامی که یک وضعیت اصلی دستگاه رخ می دهد (مانند دستگاه آفلاین یا دستگاه آنلاین)
این رویدادها در سطح adb برای تصمیم گیری در مورد متصل بودن یا نبودن دستگاه، آنلاین یا آفلاین کافی هستند. اما برای مهار تست، به حالت قویتر از این نیاز داریم تا مطمئن شویم دستگاه واقعاً برای شروع آزمایشها آماده است. نباید تحت تأثیر پوسته پوسته شدن حالت بالقوه ای باشد که می تواند با یک دستگاه تازه متصل شود.
توالی رویدادها در Tradefed به این صورت است:
- دستگاه به عنوان
deviceConnectedشناخته می شود و برای رویدادهای عادی ازadbباز است یک رویداد داخلی Tradefed ایجاد می شود که:
- بررسی کنید که آیا دستگاه از قبل شناخته شده است. Tradefed به برخی از دستگاهها (مخصوصاً دستگاه فعلی اختصاص داده شده و آزمایشهای در حال اجرا) اشاره داخلی میکند تا از گم شدن تصادفی آنها توسط TF جلوگیری کند.
- بررسی کنید که آیا دستگاه
ONLINEیاOFFLINEاست.
اگر دستگاه:
OFFLINE: دستگاه به حالت TradefedCONNECTED_OFFLINEتغییر میکند، که هنوز به دستگاه اجازه نمیدهد آزمایشها را اجرا کند. اگر دستگاه بعدا آنلاین شود، چرخهONLINEرا طی می کند. اگر یک رویدادdeviceDisconnectدریافت کنیم، دستگاه به سادگی از لیست حذف خواهد شد.ONLINE(همانطور که توسط adb مشاهده می شود): دستگاه در حالتCONNECTED_ONLINEقرار می گیرد و در دسترس بودن آن برای تخصیص آزمایشی بررسی می شود:checking_availability.
اگر بررسی
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 زیربنایی هنوز جایگزین می شود تا آزمایش بر روی مرجع مناسب ادامه یابد. هر بار که یک دستگاه قطع/وصل می شود (به عنوان مثال، در حین راه اندازی مجدد) این کار به طور یکپارچه انجام می شود.