Detecção de dispositivo no Tradefed

Uma nova conexão de dispositivo aciona uma série de eventos assíncronos que não são óbvios, mas que valem a pena serem entendidos.

Conectado fisicamente

Tradefed usa a biblioteca ddmlib (uma biblioteca Java adb ) para fornecer a interação básica com adb e dispositivos. Parte desta solução é a interface IDeviceChangeListener que permite a recepção de novos eventos do dispositivo, tais como:

  • deviceConnected : Quando um novo dispositivo é visto pelo adb
  • deviceDisconnected : Quando um dispositivo não está mais reportando ao adb
  • deviceChanged : Quando ocorre um estado principal do dispositivo (como dispositivo offline ou dispositivo online)

Esses eventos são suficientes no nível adb para decidir se um dispositivo está conectado, online ou offline. Mas para o equipamento de teste, precisamos de um estado mais forte do que isso para garantir que um dispositivo esteja realmente pronto para começar a executar testes; ele não deve ser afetado por possíveis falhas de estado que podem vir com um dispositivo recém-conectado.

Esta é a sequência de eventos no Tradefed:

  1. O dispositivo é reconhecido como deviceConnected e aberto a eventos regulares do adb
  2. É criado um evento Tradefed interno que irá:

    • Verifique se o dispositivo já é conhecido; Tradefed mantém referência interna a alguns dispositivos (especialmente o atual alocado e executando testes) para evitar que o TF os perca aleatoriamente.
    • Verifique se o dispositivo está ONLINE ou OFFLINE .
  3. Se o dispositivo for:

    • OFFLINE : o dispositivo será alterado para o estado Tradefed CONNECTED_OFFLINE , que ainda não permite que o dispositivo execute testes. Se o dispositivo estiver online mais tarde, ele passará pelo ciclo ONLINE . Se recebermos um evento deviceDisconnect , o dispositivo será simplesmente removido da lista.

    • ONLINE (como visto pelo adb): O dispositivo será colocado no estado CONNECTED_ONLINE e terá sua disponibilidade verificada para alocação de teste: checking_availability .

  4. Se a verificação de availability for bem-sucedida, o dispositivo será marcado como disponível para alocação de teste; ele será capaz de executar testes. Caso contrário, o dispositivo será marcado como unavailable para alocação e não poderá receber nenhum teste.

Todos esses estados são refletidos no console do Tradefed ao listar os dispositivos via: tf> list devices

É importante observar que, quando o dispositivo estiver alocado para um teste, a maioria dos itens acima não ocorrerá e o Tradefed determinará o estado do dispositivo internamente. Portanto, é possível que um dispositivo desapareça dos adb devices enquanto ainda está sendo listado pelo Tradefed. Isso pode acontecer quando um teste está reiniciando o dispositivo, por exemplo.

Dispositivo virtual conectado via "adb connect"

Quando um dispositivo virtual remoto é criado, o Tradefed se conecta a ele usando adb connect . Isso geralmente acionará o dispositivo exibido em adb devices como <some ip>:<port number> e seguirá a mesma sequência dos dispositivos conectados fisicamente.

Rastreamento de dispositivo quando ocorre um evento deviceConnected

Quando ocorre deviceConnected , ddmlib cria um novo IDevice de referência para rastrear o dispositivo recém-conectado.

A Tradefed usa essa referência e a envolve em sua própria implementação da interface de dispositivo ITestDevice para fornecer um serviço mais avançado. Mas o IDevice subjacente é sempre aquele vindo de ddmlib .

Isso significa que se um novo dispositivo for conectado, um novo ITestDevice será criado e associado ao IDevice. Quando isso acontece durante uma chamada e o ITestDevice está sendo usado, o IDevice subjacente ainda é substituído para que o teste possa prosseguir na referência apropriada. Isso é feito perfeitamente cada vez que um dispositivo é desconectado/reconectado (por exemplo, durante uma reinicialização).