Para comprender esta sección, primero estudia el valor @Option de Tradefed.
Las opciones típicas de 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 realizar un paso adicional y resolver parte de esta información adicional si es necesario.
Ejemplo de opción de archivo
Ejemplo de archivo @option:
@Option(name = 'config-file')
private File mConfigFile;
Lo anterior se puede establecer a través de la configuración XML:
<option name="config-file" value="/tmp/file" />
o mediante el comando:
--config-file /tmp/file
Descripción
La función te permite resolver @Options de 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 de acceso apunta a un archivo dentro de un bucket de Google Cloud Storage (GCS) en el que se almacena. Cuando Tradefed vea esa ruta de acceso remota, intentará descargar el archivo de forma local y asignarlo a la @Option. Esto hace que la variable mConfigFile
ahora apunte a la versión local del archivo, que la prueba puede usar.
Si, por algún motivo, no se puede descargar el archivo remoto, 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 la resolución falla, no arrojará una excepción y simplemente no 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á la clave o el valor a todas las descargas dinámicas que se intenten en la invocación.
Protocolos compatibles
Los protocolos compatibles 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 las que descargar. Actualmente, la resolución de @Option está habilitada solo para la configuración principal de XML de Tradefed.
Si se ejecuta como un paquete, los módulos actuales (AndroidTest.xml
) no resolverán los archivos de forma predeterminada.
El objetivo de esto es evitar que los módulos creen dependencias desconocidas. Para escapar de esta situación, usa --enable-module-dynamic-download
a nivel del paquete, pero los paquetes 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 coincidirá en la ruta de acceso del 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 mantenida a largo plazo.
Los protocolos implementados se pueden agregar al archivo META-INF de servicios del harness para activar oficialmente la compatibilidad.