Wykrywanie urządzenia w Tradefed

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 : Gdy adb widzi nowe urządzenie
  • deviceDisconnected : Gdy urządzenie nie zgłasza się już do adb
  • 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:

  1. Urządzenie jest rozpoznawane jako deviceConnected i otwarte na regularne zdarzenia z adb
  2. 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 czy OFFLINE .
  3. Jeśli urządzenie jest:

    • OFFLINE : Urządzenie zostanie przełączone w stan Tradefed CONNECTED_OFFLINE , który nie pozwala jeszcze na przeprowadzanie testów. Jeśli urządzenie będzie później online, przejdzie przez cykl ONLINE . Jeśli otrzymamy zdarzenie deviceDisconnect , urządzenie zostanie po prostu usunięte z listy.

    • ONLINE (widziane przez adb): Urządzenie zostanie wprowadzone w stan CONNECTED_ONLINE i jego dostępność zostanie sprawdzona w celu przydzielenia testowego: checking_availability .

  4. 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 jako unavailable 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).