Carregar protocolos com a configuração global

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

As opções típicas no Tradefed permitem que as classes de teste recebam mais informações da configuração XML ou da linha de comando. Com esse recurso, você pode dar um passo a mais e resolver 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 por configuração XML:

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

ou pelo comando:

--config-file /tmp/file

Descrição

O recurso permite resolver @Options do tipo "File" que são remotos em um arquivo local para ficar disponível de maneira 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. Ao ver esse caminho remoto, o Tradefed tenta baixar o arquivo localmente e atribuí-lo à @Option. Isso faz com que a variável mConfigFile 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 vai gerar uma ConfigurationException que impede a execução do teste. Consideramos a falta desses arquivos uma falha crítica, já que alguns artefatos de teste também vão estar ausentes.

Usar parâmetros de consulta

É possível adicionar parâmetros de consulta a um URL usando ?. Por exemplo: gs://bucket/path?unzip=true. O par 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 vai gerar uma exceção e simplesmente não vai substituir o arquivo. Exemplo: ?optional=true

Você também pode transmitir argumentos de consulta globais via --dynamic-download-args key=value, que vai 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 oferece suporte apenas a um número limitado de protocolos e locais para download. A resolução de @Option está ativada apenas para a configuração principal do XML Tradefed.

Se estiver sendo executado como um conjunto, os módulos atuais (AndroidTest.xml) não vão resolver os arquivos por padrão. Isso evita que os módulos criem 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 vão ativar esse recurso.

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 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 do arnés para ativar oficialmente o suporte.