La connessione di un nuovo dispositivo attiva una serie di eventi asincroni non ovvi, ma che vale la pena comprendere.
Connesso fisicamente
Tradefed utilizza la libreria ddmlib
(una libreria Java adb
) per fornire l'interazione di base con adb
e i dispositivi. Parte di questa soluzione è l'interfaccia IDeviceChangeListener che consente la ricezione di nuovi eventi del dispositivo, ad esempio:
deviceConnected
: Quando un nuovo dispositivo viene rilevato daadb
deviceDisconnected
: Quando un dispositivo non invia più report aadb
deviceChanged
: Quando si verifica uno stato importante del dispositivo (ad esempio, dispositivo offline o dispositivo online)
Questi eventi sono sufficienti a livello di adb
per decidere se un dispositivo è
connesso, online o offline. Tuttavia, per l'ambiente di test, abbiamo bisogno di uno stato più
forte per garantire che un dispositivo sia veramente pronto per iniziare a eseguire i test; non
deve essere influenzato dalla potenziale instabilità dello stato che può verificarsi con un dispositivo
appena connesso.
Questa è la sequenza di eventi in Tradefed:
- Il dispositivo è riconosciuto come
deviceConnected
ed è aperto agli eventi regolari a partire dal giornoadb
Viene creato un evento Tradefed interno che:
- Controlla se il dispositivo è già noto. Tradefed mantiene un riferimento interno ad alcuni dispositivi (in particolare quello attualmente allocato e in esecuzione dei test) per evitare che TF li perda di vista in modo casuale.
- Controlla se il dispositivo è
ONLINE
oOFFLINE
.
Se il dispositivo è:
OFFLINE
: il dispositivo verrà impostato sullo statoCONNECTED_OFFLINE
di Tradefed, che non consente ancora di eseguire test sul dispositivo. Se il dispositivo torna online in un secondo momento, verrà eseguito il cicloONLINE
. Se riceviamo un eventodeviceDisconnect
, il dispositivo verrà semplicemente rimosso dall'elenco.ONLINE
(come visto da adb): il dispositivo verrà messo nello statoCONNECTED_ONLINE
e la sua disponibilità verrà verificata per l'allocazione del test:checking_availability
.
Se il controllo
availability
va a buon fine, il dispositivo verrà contrassegnato come disponibile per l'assegnazione dei test e potrà eseguirli. In caso contrario, il dispositivo verrà contrassegnato comeunavailable
per l'allocazione e non potrà ricevere test.
Tutti questi stati vengono visualizzati nella console Tradefed quando vengono elencati i
dispositivi tramite: tf> list devices
È importante notare che quando il dispositivo è attualmente allocato per un test,
la maggior parte delle operazioni sopra indicate non verrà eseguita e Tradefed determinerà internamente lo stato del dispositivo. Pertanto, è possibile che un dispositivo scompaia da 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 a esso utilizzando adb
connect
. In genere, questo attiverà la visualizzazione del dispositivo in adb devices
come
<some ip>:<port number>
e seguirà la stessa sequenza dei dispositivi
collegati fisicamente.
Monitoraggio del dispositivo quando si verifica un evento deviceConnected
Quando si verifica deviceConnected
, ddmlib
crea un nuovo riferimento
IDevice
per monitorare il dispositivo appena connesso.
Tradefed utilizza questo riferimento e lo incorpora 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, viene creato un nuovo ITestDevice e associato all'IDevice. Quando ciò si verifica 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/riconnesso (ad esempio, durante un riavvio).