Rilevamento del dispositivo in Tradefed

Una nuova connessione del dispositivo innesca una serie di eventi asincroni che non sono evidenti ma che vale la pena comprendere.

Fisicamente connesso

Tradefed utilizza la libreria ddmlib (una libreria Java adb ) per fornire l'interazione di base con adb e dispositivi. Parte di questa soluzione è l' interfaccia IDeviceChangeListener che consente la ricezione di nuovi eventi del dispositivo, come:

  • deviceConnected : quando un nuovo dispositivo viene visto da adb
  • deviceDisconnected : quando un dispositivo non segnala più ad adb
  • deviceChanged : quando si verifica uno stato importante del dispositivo (come dispositivo offline o dispositivo online)

Questi eventi sono sufficienti a livello adb per decidere se un dispositivo è connesso o meno, online o offline. Ma per il test cablaggio, abbiamo bisogno di uno stato più forte di questo per garantire che un dispositivo sia veramente pronto per iniziare a eseguire i test; non dovrebbe essere influenzato da potenziali problemi di stato che possono verificarsi con un dispositivo appena connesso.

Questa è la sequenza degli eventi in Tradefed:

  1. Il dispositivo è riconosciuto come deviceConnected e aperto a eventi regolari da adb
  2. Viene creato un evento Tradefed interno che:

    • Controlla se il dispositivo è già noto; Tradefed mantiene riferimenti interni ad alcuni dispositivi (in particolare quello attualmente allocato e in esecuzione di test) per evitare che TF ne perda traccia in modo casuale.
    • Controlla se il dispositivo è ONLINE o OFFLINE .
  3. Se il dispositivo è:

    • OFFLINE : il dispositivo passerà allo stato Tradefed CONNECTED_OFFLINE , che non consente ancora al dispositivo di eseguire test. Se il dispositivo è online in un secondo momento, eseguirà il ciclo ONLINE . Se riceviamo un evento deviceDisconnect , il dispositivo verrà semplicemente rimosso dall'elenco.

    • ONLINE (come visto da adb): il dispositivo verrà messo nello stato CONNECTED_ONLINE e verrà verificata la sua disponibilità per l'assegnazione del test: checking_availability .

  4. Se la verifica availability ha esito positivo, il dispositivo verrà contrassegnato come disponibile per l'assegnazione del test; sarà in grado di eseguire test. In caso contrario, il dispositivo verrà contrassegnato come unavailable per l'assegnazione e non potrà ricevere alcun test.

Tutti questi stati si riflettono nella console Tradefed quando si elencano i dispositivi tramite: tf> list devices

È importante notare che quando il dispositivo è attualmente assegnato per un test, la maggior parte di quanto sopra non si verificherà e Tradefed determinerà internamente lo stato del dispositivo. Quindi è possibile che un dispositivo scompaia dai adb devices pur essendo ancora elencato da Tradefed. Ciò può accadere, ad esempio, quando un test riavvia il dispositivo.

Dispositivo virtuale connesso con adb connect

Quando viene creato un dispositivo virtuale remoto, Tradefed si connette ad esso utilizzando adb connect . Questo di solito attiverà la visualizzazione del dispositivo nei adb devices come <some ip>:<port number> e seguirà la stessa sequenza dei dispositivi fisicamente collegati.

Monitoraggio del dispositivo quando si verifica un evento deviceConnected

Quando si verifica deviceConnected , ddmlib crea un nuovo IDevice di riferimento per tenere traccia del dispositivo appena connesso.

Tradefed utilizza tale riferimento e lo inserisce nella propria implementazione dell'interfaccia del dispositivo ITestDevice per fornire un servizio più avanzato. Ma l'IDevice sottostante è sempre quello proveniente da ddmlib .

Ciò significa che se viene connesso un nuovo dispositivo, un nuovo ITestDevice viene creato e associato all'IDevice. Quando ciò accade durante un'invocazione e viene utilizzato ITestDevice, l'IDevice sottostante viene comunque sostituito in modo che il test possa procedere sul riferimento corretto. Questa operazione viene eseguita senza problemi ogni volta che un dispositivo viene disconnesso/ricollegato (ad esempio durante un riavvio).