Carregar protocolos com configuração global

Para entender esta seção, primeiro estude a Tradefed @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;

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

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

ou por comando:

--config-file /tmp/file

Descrição

O recurso permite que você resolva @Options do tipo File que são remotos em um arquivo local para que fiquem disponíveis de forma integrada do ponto de vista do usuário.

Para que isso funcione, o arquivo precisa ser especificado 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) em que ele está armazenado. O Tradefed, ao detectar esse caminho remoto, tentará fazer o download do arquivo localmente e atribuirá à @Option. Isso faz com que a variável mConfigFile aponte para a versão local do arquivo, que pode ser usada pelo teste.

Se não for possível fazer o download do arquivo remoto por qualquer motivo, o Tradefed vai gerar uma ConfigurationException que vai impedir a execução do teste. Consideramos a ausência desses arquivos uma falha crítica, já que alguns artefatos de teste também não estão presentes.

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 vai estar disponível na implementação da interface IRemoteFileResolver.

Há dois comportamentos integrados disponíveis:

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

Também é possível transmitir argumentos de consulta globais por --dynamic-download-args key=value, que 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

No momento, a resolução dinâmica de @Option é compatível apenas com um número limitado de protocolos e locais para download. No momento, a resolução de @Option está ativada apenas para a configuração principal do XML Tradefed.

Se executados 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 conjunto, mas os principais conjuntos, como o Conjunto de teste de compatibilidade (CTS) e o Conjunto de teste de fornecedor (VTS), não o ativam.

Implementar um novo protocolo

Os protocolos compatíveis 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 meio de 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 META-INF services para ativar oficialmente o suporte.