La connexion d'un nouvel appareil déclenche une série d'événements asynchrones qui ne sont pas évidents, mais qu'il est important de comprendre.
Connecté physiquement
Tradefed utilise la bibliothèque ddmlib
(une bibliothèque Java adb
) pour fournir l'interaction de base avec adb
et les appareils. Une partie de cette solution est l'interface IDeviceChangeListener qui permet de recevoir de nouveaux événements d'appareil, tels que :
deviceConnected
: lorsqu'un nouvel appareil est détecté paradb
deviceDisconnected
: lorsqu'un appareil ne transmet plus de données àadb
deviceChanged
: lorsqu'un état majeur de l'appareil se produit (par exemple, l'appareil est hors connexion ou en ligne)
Ces événements sont suffisants au niveau adb
pour déterminer si un appareil est connecté, en ligne ou hors connexion. Toutefois, pour le harnais de test, nous avons besoin d'un état plus fort pour nous assurer qu'un appareil est réellement prêt à exécuter des tests. Il ne doit pas être affecté par une éventuelle instabilité de l'état qui peut survenir avec un appareil nouvellement connecté.
Voici la séquence d'événements dans Tradefed :
- L'appareil est reconnu comme
deviceConnected
et ouvert aux événements réguliers à partir duadb
. Un événement Tradefed interne est créé pour :
- Vérifiez si l'appareil est déjà connu. Tradefed conserve une référence interne à certains appareils (en particulier ceux actuellement attribués et exécutant des tests) pour éviter que TF ne les perde de vue de manière aléatoire.
- Vérifiez si l'appareil est
ONLINE
ouOFFLINE
.
Si l'appareil est :
OFFLINE
: l'appareil passera à l'état TradefedCONNECTED_OFFLINE
, qui ne lui permet pas encore d'exécuter des tests. Si l'appareil est de nouveau en ligne ultérieurement, il passera par le cycleONLINE
. Si nous recevons un événementdeviceDisconnect
, l'appareil sera simplement supprimé de la liste.ONLINE
(tel qu'indiqué par adb) : l'appareil sera mis dans l'étatCONNECTED_ONLINE
et sa disponibilité sera vérifiée pour l'attribution des tests :checking_availability
.
Si la vérification
availability
réussit, l'appareil est marqué comme disponible pour l'attribution de tests et peut exécuter des tests. Si ce n'est pas le cas, l'appareil sera marqué commeunavailable
pour l'allocation et ne pourra recevoir aucun test.
Tous ces états sont reflétés dans la console Tradefed lors de la liste des appareils via : tf> list devices
Il est important de noter que lorsque l'appareil est actuellement attribué à un test, la plupart des éléments ci-dessus ne se produiront pas et Tradefed déterminera l'état de l'appareil en interne. Il est donc possible qu'un appareil disparaisse de adb devices
tout en étant toujours listé par Tradefed. Cela peut se produire, par exemple, lorsqu'un test redémarre l'appareil.
Appareil virtuel connecté avec adb connect
Lorsqu'un appareil virtuel à distance est créé, Tradefed s'y connecte à l'aide de adb
connect
. L'appareil devrait alors s'afficher dans adb devices
sous la forme <some ip>:<port number>
et suivre la même séquence que les appareils connectés physiquement.
Suivi de l'appareil lorsqu'un événement deviceConnected se produit
Lorsque deviceConnected
se produit, ddmlib
crée une référence IDevice pour suivre le nouvel appareil connecté.
Tradefed utilise cette référence et l'encapsule dans sa propre implémentation de l'interface d'appareil ITestDevice pour fournir un service plus avancé. Toutefois, l'IDevice sous-jacent est toujours celui provenant de ddmlib
.
Cela signifie que si un nouvel appareil est connecté, un nouvel ITestDevice est créé et associé à l'IDevice. Lorsque cela se produit lors d'une invocation et que l'ITestDevice est utilisé, l'IDevice sous-jacent est toujours remplacé afin que les tests puissent se poursuivre sur la bonne référence. Cette opération est effectuée de manière transparente chaque fois qu'un appareil est déconnecté/reconnecté (par exemple, lors d'un redémarrage).