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