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