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. Dazu gehören:
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 Zustand, um sicherzustellen, dass ein Gerät wirklich bereit ist, Tests auszuführen. Es sollte nicht durch potenzielle Instabilitäten des Zustands beeinträchtigt werden, die bei einem neu verbundenen Gerät auftreten können.
So sieht die Ereignisabfolge in Tradefed aus:
- Das Gerät wird als
deviceConnected
erkannt und ist für regelmäßige 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 speichert interne Verweise auf einige Geräte (insbesondere auf das derzeit zugewiesene und für Tests verwendete Gerät), damit TF nicht zufällig den Überblick über sie verliert.
- Prüfen Sie, ob das Gerät
ONLINE
oderOFFLINE
ist.
Gerät:
OFFLINE
: Das Gerät wird in den Tradefed-StatusCONNECTED_OFFLINE
versetzt. In diesem Fall können mit dem Gerät noch keine Tests ausgeführt werden. 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 wird für die Testzuweisung geprüft:checking_availability
.
Wenn die
availability
-Prüfung erfolgreich ist, wird das Gerät als verfügbar für die Testzuweisung markiert. Es können dann Tests ausgeführt werden. Andernfalls wird das Gerät für die Zuweisung alsunavailable
gekennzeichnet 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 von Tradefed aufgeführt wird. 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 virtuelles Remote-Gerät erstellt wird, stellt Tradefed über adb
connect
eine Verbindung zu diesem 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, wenn ein „deviceConnected“-Ereignis auftritt
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 ITestDevice verwendet wird, wird das zugrunde liegende IDevice trotzdem ersetzt, damit die Tests mit der richtigen Referenz fortgesetzt werden können. Dies erfolgt nahtlos, wenn ein Gerät getrennt oder wieder verbunden wird (z. B. während eines Neustarts).