Carga protocolos con configuración global

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 en true 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.