Carregar protocolos por meio da configuração global

Para entender esta seção, primeiro estude o 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ê dê 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 via configuração XML:

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

ou através do comando:

--config-file /tmp/file

Descrição

O recurso permite que você resolva @Options de tipo de arquivo que são remotos em um arquivo local para que estejam disponíveis perfeitamente 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) onde ele está armazenado. Tradefed ao ver esse caminho remoto, tentará baixar o arquivo localmente e atribuí-lo à @Option. Isso resulta na variável mConfigFile para agora apontar 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 lançará uma ConfigurationException que impedirá a execução do teste. Consideramos a falta desses arquivos uma falha crítica, pois alguns artefatos de teste também estarão ausentes.

Como usar parâmetros de consulta

É possível adicionar parâmetros de consulta a uma 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
  • opcional: O padrão é false . Se definido como true e a resolução falhar, ele não lançará uma exceção e simplesmente não substituirá o arquivo. Exemplo: ?optional=true

Você também pode passar argumentos de consulta global via --dynamic-download-args key=value que passará a chave/valor para todos os downloads dinâmicos tentados na invocação.

Protocolos compatíveis

Os protocolos oficialmente suportados 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

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

Se estiver executando como um conjunto, os módulos atuais ( AndroidTest.xml ) não resolverão os arquivos por padrão. Isso é feito para evitar 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 Compatibility Test Suite (CTS) e o Vendor Test Suite (VTS) , não o habilitarão.

Implementação de um novo protocolo

Os protocolos que são suportados possuem uma implementação no Tradefed da interface IRemoteFileResolver , que define a tag curta do protocolo que será correspondida no caminho do arquivo através getSupportedProtocol . Por exemplo, gs é usado para o protocolo do Google Cloud Storage. A interface recomendada para implementar é #resolveRemoteFiles(RemoteFileResolverArgs) , que será a interface mantida a longo prazo.

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