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