Carregar protocolos com configuração global

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

As opções típicas do 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ê um passo a mais 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 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 do tipo 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 ao @Option. Isso faz com que a variável mConfigFile aponte agora para a versão local do arquivo, que pode ser usada pelo teste.

Se o arquivo remoto não puder ser baixado por algum motivo, o Tradefed lançará uma ConfigurationException que impedirá a execução do teste. Consideramos que a falta desses arquivos é uma falha crítica, pois alguns artefatos de teste também estarão faltando.

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:

  • descompactar: ​​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, não gerará 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 suportados

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. Isto serve 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 ativarão.

Implementar um novo protocolo

Os protocolos 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 de getSupportedProtocol . Por exemplo, gs é usado para o protocolo 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 chicote para ativar oficialmente o suporte.