Para entender esta seção, primeiro estude o curso @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ê avance 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;
Os itens acima podem ser definidos por meio da configuração XML:
<option name="config-file" value="/tmp/file" />
ou por 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, é preciso especificar o arquivo 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)
armazenados. O Tradefed ao ver esse caminho remoto tenta fazer o download do arquivo.
localmente e atribuí-lo a @Option. Isso resulta na variável mConfigFile
para apontar 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
perder esses arquivos, uma falha crítica, pois alguns artefatos de teste também serão
desaparecidos.
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 em
o método IRemoteFileResolver
interface
implementação.
Dois comportamentos integrados estão disponíveis:
- unzip: se definido como
true
e o arquivo transferido por download for um zip, ele será descompactados automaticamente para 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 usando --dynamic-download-args key=value
.
que passará a chave/valor para todos os downloads dinâmicos tentados no
invocação.
Protocolos compatíveis
Os protocolos oficialmente aceitos 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
No momento, a resolução dinâmica de @Option só oferece suporte a um número limitado de protocolos e locais de origem do download. No momento, a resolução de @Option está ativada apenas para a configuração principal do XML Tradefed.
Se forem executados como um pacote, os módulos atuais (AndroidTest.xml
) não resolverão a
por padrão.
Isso serve para evitar que os módulos criem algumas dependências desconhecidas. Isso
pode ser escapado usando --enable-module-dynamic-download
no nível do pacote,
mas os principais pacotes, como o conjunto de teste de compatibilidade
(CTS) e Pacote de testes de fornecedor
(VTS) não o ativará.
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
protocolo do Google Cloud Storage. A interface recomendada para implementação é
#resolveRemoteFiles(RemoteFileResolverArgs)
, que será o de longo prazo
bem gerenciada e gerenciada.
Os protocolos implementados podem ser adicionados ao arcabouço META-INF serviços para ativar oficialmente o suporte.