Carregar protocolos com configuração global

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

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

Exemplo de opção de arquivo

Arquivo de exemplo @option:

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

Os itens acima podem ser definidos por meio da configuração XML:

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

ou por comando:

--config-file /tmp/file

Descrição

O recurso permite resolver @Options do tipo de arquivo remotos em um arquivo local para que fiquem disponíveis de forma integrada do ponto de vista do usuário.

Para que isso funcione, é preciso especificar o arquivo com um caminho de estilo remoto. Por exemplo:

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

Esse caminho aponta para um arquivo em um bucket do Google Cloud Storage (GCS) armazenados. O Tradefed ao ver esse caminho remoto tenta fazer o download do arquivo. localmente e atribuí-lo a @Option. Isso resulta na variável mConfigFile para apontar para a versão local do arquivo, que pode ser usada pelo teste.

Se o arquivo remoto não puder ser transferido por algum motivo, o Tradefed vai gerar uma ConfigurationException que vai impedir a execução do teste. Consideramos perder esses arquivos, uma falha crítica, pois alguns artefatos de teste também serão desaparecidos.

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 em o método IRemoteFileResolver interface implementação.

Dois comportamentos integrados estão disponíveis:

  • unzip: se definido como true e o arquivo transferido por download for um zip, ele será descompactados automaticamente para um local temporário. Exemplo: ?unzip=true
  • Opcional: o padrão é false. Se definido como true e a resolução falhar, ele não vai gerar uma exceção e simplesmente não vai substituir o arquivo. Exemplo: ?optional=true

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

Protocolos compatíveis

Os protocolos oficialmente aceitos e seus 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

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

Se forem executados como um pacote, os módulos atuais (AndroidTest.xml) não resolverão a por padrão. Isso serve para evitar que os módulos criem algumas dependências desconhecidas. Isso pode ser escapado usando --enable-module-dynamic-download no nível do pacote, mas os principais pacotes, como o conjunto de teste de compatibilidade (CTS) e Pacote de testes de fornecedor (VTS) não o ativará.

Implementar um novo protocolo

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

Os protocolos implementados podem ser adicionados ao arcabouço META-INF serviços para ativar oficialmente o suporte.