Para comprender esta sección, primero estudia @Option de Tradefed.
Las opciones típicas en Tradefed permiten que las clases de prueba reciban información adicional de la configuración XML o la línea de comandos. Esta función te permite dar un paso más y resolver parte de esta información adicional si es necesario.
Ejemplo de opción de archivo
Archivo de ejemplo @option:
@Option(name = 'config-file')
private File mConfigFile;
Lo anterior se puede configurar a través de XML:
<option name="config-file" value="/tmp/file" />
o con el siguiente comando:
--config-file /tmp/file
Descripción
La función te permite resolver @Options con tipo de archivo que son remotos en un archivo local para que estén disponibles sin problemas desde el punto de vista del usuario.
Para que esto funcione, el archivo debe especificarse con una ruta de acceso de estilo remoto. Por ejemplo:
--config-file gs://bucket/tmp/file
Esta ruta apunta a un archivo dentro de un bucket de Google Cloud Storage (GCS) en el que está almacenado. Cuando Tradefed vea esa ruta remota, intentará descargar el archivo de forma local y asignarlo a @Option. Esto hace que la variable mConfigFile
ahora apunte a la versión local del archivo, que se puede usar en la prueba.
Si el archivo remoto no se puede descargar por algún motivo, Tradefed arrojará un ConfigurationException
que impedirá que se ejecute la prueba. Consideramos que la falta de esos archivos es un error crítico, ya que también faltarán algunos artefactos de prueba.
Usa parámetros de consulta
Es posible agregar parámetros de consulta a una URL con ?
. Por ejemplo, gs://bucket/path?unzip=true
. El par clave/valor unzip=true
estará disponible en la implementación de la interfaz IRemoteFileResolver.
Hay dos comportamientos integrados disponibles:
- unzip: Si se establece en
true
y el archivo descargado es un archivo ZIP, se descomprimirá automáticamente en una ubicación temporal. Ejemplo:?unzip=true
- Opcional: El valor predeterminado es
false
. Si se establece entrue
y falla la resolución, no se generará una excepción y simplemente no se reemplazará el archivo. Ejemplo:?optional=true
También puedes pasar argumentos de consulta globales a través de --dynamic-download-args key=value
, que pasarán el par clave-valor a todas las descargas dinámicas que se intenten en la invocación.
Protocolos admitidos
Los protocolos admitidos oficialmente y sus formatos correspondientes son los siguientes:
- Google Cloud Storage, protocolo:
gs
, formato:gs://<bucket name>/path
- Archivos locales, protocolo:
file
, formato:file:/local/path
- Vínculos HTTP, protocolo:
http
, formato:http://url
- Vínculos HTTPS, protocolo:
https
, formato:https://url
Limitaciones
Actualmente, la resolución dinámica de @Option solo admite una cantidad limitada de protocolos y ubicaciones desde los que se puede descargar. Actualmente, la resolución de @Option solo está habilitada para la configuración principal de Tradefed en XML.
Si se ejecuta como un conjunto, los módulos actuales (AndroidTest.xml
) no resolverán los archivos de forma predeterminada.
Esto tiene como objetivo evitar que los módulos creen dependencias desconocidas. Esto se puede omitir con --enable-module-dynamic-download
a nivel del conjunto, pero los conjuntos principales, como el Conjunto de pruebas de compatibilidad (CTS) y el Conjunto de pruebas de proveedores (VTS), no lo habilitarán.
Implementa un protocolo nuevo
Los protocolos compatibles tienen una implementación en Tradefed de la interfaz IRemoteFileResolver, que define la etiqueta corta del protocolo que se correlacionará en la ruta de acceso al archivo a través de getSupportedProtocol
. Por ejemplo, gs
se usa para el protocolo de Google Cloud Storage. La interfaz recomendada para implementar es #resolveRemoteFiles(RemoteFileResolverArgs)
, que será la interfaz que se mantendrá a largo plazo.
Los protocolos implementados se pueden agregar al archivo META-INF de servicios de arnés para activar oficialmente la compatibilidad.