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ê dê um passo extra e resolva algumas dessas informações adicionais, se necessário.

Exemplo de opção de arquivo

Exemplo de arquivo @opção:

@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 remotas em um arquivo local para estar disponível 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

Este caminho aponta para um arquivo dentro de um bucket do Google Cloud Storage (GCS) onde 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 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 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 faltando.

Usar parâmetros de consulta

Adicionar parâmetros de consulta a um URL é possível 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 lançará uma exceção e simplesmente não substituirá o arquivo. Exemplo: ?optional=true

Você também pode passar argumentos de consulta globais 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. Isso 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 pacote, mas os principais pacotes, como o Compatibility Test Suite (CTS) e o Vendor Test Suite (VTS), não o habilitarão.

Implementar um novo protocolo

Os protocolos suportados possuem uma implementação em Tradefed da interface IRemoteFileResolver , que define o tag curto do protocolo que será correspondido no caminho do arquivo através de getSupportedProtocol . Por exemplo, gs é usado para o protocolo Google Cloud Storage. A interface recomendada a ser implementada é #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.