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ê 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;
O acima pode ser definido pela configuração XML:
<option name="config-file" value="/tmp/file" />
ou por comando:
--config-file /tmp/file
Descrição
O recurso permite que você resolva @Options do tipo File que são 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 não for possível fazer o download do arquivo remoto por qualquer 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 ela for definida comotrue
e a resolução falhar, ela não vai gerar uma exceção nem 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 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 é compatível apenas com 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 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 meio de 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.