Eine neue Geräteverbindung löst eine Reihe asynchroner Ereignisse aus, die nicht offensichtlich, aber dennoch wichtig sind.
Physisch verbunden
Tradefed verwendet die ddmlib
-Bibliothek (eine Java-adb
-Bibliothek), um die grundlegende Interaktion mit adb
und Geräten zu ermöglichen. Ein Teil dieser Lösung ist die IDeviceChangeListener-Schnittstelle, die den Empfang neuer Geräteereignisse ermöglicht, z. B.:
deviceConnected
: Wenn ein neues Gerät vonadb
erkannt wirddeviceDisconnected
: Wenn ein Gerät keine Daten mehr anadb
sendetdeviceChanged
: Wenn ein wichtiger Gerätestatus eintritt (z. B. Gerät offline oder Gerät online)
Diese Ereignisse reichen auf adb
-Ebene aus, um zu entscheiden, ob ein Gerät verbunden, online oder offline ist. Für den Testharness benötigen wir jedoch einen stabileren Status, um sicherzustellen, dass ein Gerät wirklich bereit ist, Tests auszuführen. Er sollte nicht durch mögliche Statusinstabilität beeinträchtigt werden, die bei einem neu verbundenen Gerät auftreten kann.
Das ist die Ereignisabfolge in Tradefed:
- Das Gerät wird als
deviceConnected
erkannt und ist für reguläre Ereignisse abadb
geöffnet. Es wird ein internes Tradefed-Ereignis erstellt, das Folgendes bewirkt:
- Prüfen Sie, ob das Gerät bereits bekannt ist. Tradefed behält eine interne Referenz für einige Geräte (insbesondere für das aktuell zugewiesene und für das, auf dem Tests ausgeführt werden), um zu verhindern, dass TF sie zufällig verliert.
- Prüfen Sie, ob das Gerät
ONLINE
oderOFFLINE
ist.
Wenn das Gerät:
OFFLINE
: Das Gerät wird in den Tradefed-StatusCONNECTED_OFFLINE
versetzt, in dem noch keine Tests auf dem Gerät ausgeführt werden können. Wenn das Gerät später online ist, durchläuft es denONLINE
-Zyklus. Wenn wir eindeviceDisconnect
-Ereignis erhalten, wird das Gerät einfach aus der Liste entfernt.ONLINE
(wie von adb gesehen): Das Gerät wird in den StatusCONNECTED_ONLINE
versetzt und seine Verfügbarkeit für die Testzuweisung wird geprüft:checking_availability
.
Wenn die
availability
-Prüfung erfolgreich ist, wird das Gerät als für die Testzuweisung verfügbar markiert und kann Tests ausführen. Andernfalls wird das Gerät für die Zuweisung alsunavailable
markiert und kann keine Tests empfangen.
Alle diese Status werden in der Tradefed-Konsole angezeigt, wenn die Geräte über tf> list devices
aufgelistet werden.
Wichtig: Wenn das Gerät derzeit für einen Test zugewiesen ist, treten die meisten der oben genannten Schritte nicht auf und Tradefed bestimmt den Gerätestatus intern. Es ist also möglich, dass ein Gerät aus adb devices
verschwindet, aber weiterhin von Tradefed aufgeführt wird. Das kann beispielsweise passieren, wenn ein Test das Gerät neu startet.
Virtuelles Gerät mit „adb connect“ verbunden
Wenn ein virtuelles Remote-Gerät erstellt wird, stellt Tradefed über adb
connect
eine Verbindung dazu her. Dadurch wird das Gerät in adb devices
normalerweise als <some ip>:<port number>
angezeigt und folgt derselben Sequenz wie physisch verbundene Geräte.
Geräte-Tracking bei einem „deviceConnected“-Ereignis
Wenn deviceConnected
auftritt, erstellt ddmlib
eine neue IDevice-Referenz, um das neu verbundene Gerät zu verfolgen.
Tradefed verwendet diese Referenz und umschließt sie mit einer eigenen Implementierung der Geräteschnittstelle ITestDevice, um erweiterte Dienste bereitzustellen. Die zugrunde liegende IDevice stammt jedoch immer von ddmlib
.
Wenn also ein neues Gerät verbunden wird, wird ein neues ITestDevice erstellt und mit dem IDevice verknüpft. Wenn dies während eines Aufrufs geschieht und das ITestDevice verwendet wird, wird das zugrunde liegende IDevice trotzdem ersetzt, damit die Tests mit dem richtigen Verweis fortgesetzt werden können. Das geschieht nahtlos jedes Mal, wenn ein Gerät getrennt oder wieder verbunden wird (z. B. bei einem Neustart).