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 comotrue
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.