Carregar protocolos com a configuração global

Para entender esta seção, primeiro estude o @Option do Tradefed.

As opções típicas no Tradefed permitem que as classes de teste recebam mais informações da configuração XML ou da linha de comando. Esse recurso permite que você avance mais uma etapa e resolva algumas dessas informações adicionais, se necessário.

Exemplo de opção de arquivo

Exemplo de arquivo @option:

@Option(name = 'config-file')
private File mConfigFile;

O comando acima pode ser definido pela configuração XML:

<option name="config-file" value="/tmp/file" />

ou pelo comando:

--config-file /tmp/file

Descrição

O recurso permite resolver @Options do tipo arquivo que são remotas em um arquivo local para que fiquem disponíveis de maneira integrada do ponto de vista do usuário.

Para que isso funcione, o arquivo precisa ser especificado com um caminho de estilo remoto. Exemplo:

--config-file gs://bucket/tmp/file

Esse caminho aponta para um arquivo em um bucket do Google Cloud Storage (GCS) em que ele está armazenado. Ao encontrar esse caminho remoto, o Tradefed tenta fazer o download do arquivo localmente e atribuí-lo ao @Option. Isso faz com que a variável mConfigFile agora aponte para a versão local do arquivo, que pode ser usada pelo teste.

Se o arquivo remoto não puder ser baixado por qualquer motivo, o Tradefed vai gerar uma ConfigurationException que impede a execução do teste. Consideramos a falta desses arquivos uma falha crítica, já que alguns artefatos de teste também vão estar ausentes.

Usar parâmetros de consulta

É possível adicionar parâmetros de consulta a um URL usando ?. Por exemplo, gs://bucket/path?unzip=true. A chave/valor unzip=true estará disponível na implementação da interface IRemoteFileResolver .

Dois comportamentos integrados estão disponíveis:

  • unzip: se definido como true e o arquivo baixado for um zip, ele será descompactado automaticamente em um local temporário. Exemplo: ?unzip=true
  • optional: o padrão é false. Se definido como true e a resolução falhar, uma exceção não será gerada e o arquivo não será substituído. Exemplo: ?optional=true

Também é possível transmitir argumentos de consulta globais usando --dynamic-download-args key=value, que vai transmitir a chave/valor para todos os downloads dinâmicos tentados na invocação.

Protocolos compatíveis

Os protocolos oficialmente compatíveis e os formatos correspondentes são:

  • Google Cloud Storage, protocolo: gs, formato: gs://<bucket name>/path
  • Arquivos locais, protocolo: file, formato: file:/local/path
  • Links http, protocolo: http, formato: http://url
  • Links https, protocolo: https, formato: https://url

Limitações

A resolução dinâmica de @Option atualmente oferece suporte apenas a um número limitado de protocolos e locais para download. A resolução de @Option está ativada apenas para a configuração XML principal do Tradefed.

Se estiver em execução como um pacote, os módulos atuais (AndroidTest.xml) não vão resolver os arquivos por padrão. Isso evita que os módulos criem algumas dependências desconhecidas. Isso pode ser evitado usando --enable-module-dynamic-download no nível do pacote, mas os principais pacotes, como o conjunto de teste de compatibilidade (CTS) e o Vendor Test Suite (VTS), não vão ativá-lo.

Implementar um novo protocolo

Os protocolos com suporte têm uma implementação no Tradefed da interface IRemoteFileResolver , que define a tag abreviada do protocolo que será correspondida no caminho do arquivo usando getSupportedProtocol. Por exemplo, gs é usado para o protocolo do Google Cloud Storage. A interface recomendada para implementação é #resolveRemoteFiles(RemoteFileResolverArgs), que será a interface mantida a longo prazo.

Os protocolos implementados podem ser adicionados ao arquivo de serviços META-INF do harness para ativar oficialmente o suporte.