Eine neue Geräteverbindung löst eine Reihe von asynchronen Ereignissen aus, die nicht offensichtlich sind, 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
: Wennadb
ein neues Gerät erkenntdeviceDisconnected
: Wenn ein Gerät keine Berichte mehr anadb
sendetdeviceChanged
: Wenn ein wichtiger Gerätestatus auftritt (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 Test-Harness benötigen wir jedoch einen stabileren Status, um sicherzustellen, dass ein Gerät wirklich bereit ist, Tests auszuführen. Es sollte nicht durch potenzielle Statusschwankungen beeinträchtigt werden, die bei einem neu verbundenen Gerät auftreten können.
Das ist die Ereignisabfolge in Tradefed:
- Das Gerät wird als
deviceConnected
erkannt und ist für regelmäßige Ereignisse vonadb
geöffnet. Es wird ein internes Tradefed-Ereignis erstellt, das Folgendes bewirkt:
- Prüfen Sie, ob das Gerät bereits bekannt ist. Tradefed speichert interne Verweise auf einige Geräte (insbesondere auf das derzeit zugewiesene und laufende Gerät), damit TF nicht zufällig den Überblick verliert.
- Prüfen Sie, ob das Gerät
ONLINE
oderOFFLINE
ist.
Wenn das Gerät:
OFFLINE
: Das Gerät wird in den Status „Tradefed“CONNECTED_OFFLINE
umgeschaltet, wodurch auf dem Gerät noch keine Tests 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 geprüft:checking_availability
.
Wenn die Prüfung für
availability
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 erhalten.
Alle diese Status werden in der Tradefed-Konsole angezeigt, wenn die Geräte über eine der folgenden Methoden aufgeführt werden: tf> list devices
Wenn das Gerät derzeit für einen Test zugewiesen ist, tritt die Mehrzahl der oben genannten Fälle nicht auf und Tradefed bestimmt den Gerätestatus intern. Es kann also sein, dass ein Gerät aus adb devices
verschwindet, aber weiterhin bei Tradefed aufgeführt ist. Das kann beispielsweise passieren, wenn das Gerät während eines Tests neu gestartet wird.
Virtuelles Gerät, das über adb connect verbunden ist
Wenn ein Remote-virtuelles Gerät erstellt wird, stellt Tradefed über adb
connect
eine Verbindung zu ihm her. Dadurch wird in der Regel das Gerät ausgelöst, das in adb devices
als <some ip>:<port number>
angezeigt wird. Es folgt derselben Abfolge wie physisch verbundene Geräte.
Geräte-Tracking bei einem deviceConnected-Ereignis
Wenn deviceConnected
auftritt, erstellt ddmlib
eine neue Referenz vom Typ IDevice, um das neu verbundene Gerät zu verfolgen.
Tradefed verwendet diese Referenz und umhüllt sie in seiner eigenen Implementierung der Geräteschnittstelle ITestDevice, um einen erweiterten Dienst bereitzustellen. Das zugrunde liegende IDevice ist jedoch immer das, das von ddmlib
stammt.
Wenn also ein neues Gerät verbunden wird, wird ein neues ITestDevice erstellt und mit dem IDevice verknüpft. Wenn dies während einer Aufrufung auftritt und das ITestDevice verwendet wird, wird das zugrunde liegende IDevice trotzdem ersetzt, damit die Tests mit der richtigen Referenz fortgesetzt werden können. Dies geschieht jedes Mal nahtlos, wenn ein Gerät getrennt und wieder verbunden wird (z. B. bei einem Neustart).