Nowe połączenie urządzenia wyzwala serię asynchronicznych zdarzeń, które nie są oczywiste, ale warte zrozumienia.
Fizycznie podłączony
Tradefed korzysta z biblioteki ddmlib
(biblioteki adb
Java), aby zapewnić podstawową interakcję z adb
i urządzeniami. Częścią tego rozwiązania jest interfejs IDeviceChangeListener , który umożliwia odbiór nowych zdarzeń urządzenia, takich jak:
-
deviceConnected
: Gdyadb
widzi nowe urządzenie -
deviceDisconnected
: Gdy urządzenie nie zgłasza się już doadb
-
deviceChanged
: gdy wystąpi główny stan urządzenia (taki jak urządzenie w trybie offline lub urządzenie w trybie online)
Te zdarzenia wystarczą na poziomie adb
, aby zdecydować, czy urządzenie jest podłączone, online czy offline. Jednak w przypadku wiązki testowej potrzebujemy silniejszego stanu, aby mieć pewność, że urządzenie jest naprawdę gotowe do rozpoczęcia testów; nie powinny mieć na to wpływu potencjalne niestabilności stanu, które mogą wystąpić w przypadku nowo podłączonego urządzenia.
Oto sekwencja wydarzeń w Tradefed:
- Urządzenie jest rozpoznawane jako
deviceConnected
i otwarte na regularne zdarzenia zadb
Tworzone jest wewnętrzne wydarzenie Tradefed, które:
- Sprawdź, czy urządzenie jest już znane; Tradefed utrzymuje wewnętrzne odniesienia do niektórych urządzeń (zwłaszcza tego aktualnie przydzielonego i przeprowadzającego testy), aby uniknąć przypadkowej utraty ich przez TF.
- Sprawdź, czy urządzenie jest w
ONLINE
czyOFFLINE
.
Jeśli urządzenie jest:
OFFLINE
: Urządzenie zostanie przełączone w stan TradefedCONNECTED_OFFLINE
, który nie pozwala jeszcze na przeprowadzanie testów. Jeśli urządzenie będzie później online, przejdzie przez cyklONLINE
. Jeśli otrzymamy zdarzeniedeviceDisconnect
, urządzenie zostanie po prostu usunięte z listy.ONLINE
(widziane przez adb): Urządzenie zostanie wprowadzone w stanCONNECTED_ONLINE
i jego dostępność zostanie sprawdzona w celu przydzielenia testowego:checking_availability
.
Jeżeli sprawdzenie
availability
przebiegnie pomyślnie, urządzenie zostanie oznaczone jako dostępne do przydzielenia do testu; będzie mógł przeprowadzać testy. Jeśli nie, urządzenie zostanie oznaczone jakounavailable
do przydziału i nie będzie mogło otrzymać żadnych testów.
Wszystkie te stany są odzwierciedlane w konsoli Tradefed podczas wystawiania urządzeń na listę za pomocą: tf> list devices
Należy pamiętać, że gdy urządzenie jest aktualnie przydzielone do testu, większość powyższych sytuacji nie wystąpi, a Tradefed określi stan urządzenia wewnętrznie. Możliwe jest więc, że urządzenie zniknie z adb devices
a jednocześnie będzie wystawione na liście Tradefed. Może się to zdarzyć na przykład podczas ponownego uruchamiania urządzenia.
Urządzenie wirtualne połączone z adb connect
Kiedy tworzone jest zdalne urządzenie wirtualne, Tradefed łączy się z nim za pomocą adb connect
. Zwykle spowoduje to wyświetlenie urządzenia w adb devices
jako <some ip>:<port number>
i będzie przebiegać w tej samej kolejności, co urządzenia podłączone fizycznie.
Śledzenie urządzenia po wystąpieniu zdarzenia DeviceConnected
Gdy nastąpi deviceConnected
, ddmlib
tworzy nowe urządzenie referencyjne IDevice w celu śledzenia nowo podłączonego urządzenia.
Tradefed wykorzystuje to odniesienie i włącza je do własnej implementacji interfejsu urządzenia ITestDevice , aby zapewnić bardziej zaawansowaną usługę. Ale podstawowym IDevice jest zawsze ten pochodzący z ddmlib
.
Oznacza to, że jeśli zostanie podłączone nowe urządzenie, zostanie utworzone nowe urządzenie ITestDevice i powiązane z urządzeniem IDevice. Gdy dzieje się to podczas wywołania i jest używane ITestDevice, bazowe IDevice jest nadal zastępowane, więc testowanie może być kontynuowane na podstawie odpowiedniego odniesienia. Odbywa się to płynnie za każdym razem, gdy urządzenie jest odłączane/ponownie podłączane (na przykład podczas ponownego uruchamiania).