Para entender esta seção, primeiro estude a classe @Option do Tradefed.
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ê faça uma etapa extra 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 pela 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 de arquivo remotos em um arquivo local para que fiquem disponíveis de forma 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. O Tradefed, ao detectar esse caminho remoto, tentará fazer o download do arquivo
localmente e atribuir à @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 transferido por algum motivo, o Tradefed vai gerar uma
ConfigurationException
que vai impedir a execução do teste. Consideramos
a ausência desses arquivos uma falha crítica, já que alguns artefatos de teste também
não estão presentes.
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
vai estar disponível na
implementação da
interface
IRemoteFileResolver.
Há dois comportamentos integrados disponíveis:
- unzip: se definido como
true
e o arquivo transferido por download 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
Também é possível transmitir argumentos de consulta globais por --dynamic-download-args key=value
,
que transmitirá a chave/valor para todos os downloads dinâmicos tentados na
invocação.
Protocolos com suporte
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. No momento, a resolução de @Option está ativada apenas para a configuração principal do XML Tradefed.
Se executados como um pacote, os módulos atuais (AndroidTest.xml
) não vão resolver os
arquivos por padrão.
Isso evita 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 Conjunto de teste de compatibilidade
(CTS) e o Conjunto de teste de fornecedor
(VTS), não o ativam.
Implementar um novo protocolo
Os protocolos com suporte 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 para ativar oficialmente o suporte.