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