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