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