Carga protocolos con configuración global

Para comprender esta sección, primero estudia @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 de 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

Ejemplo de @option de archivo:

@Option(name = 'config-file')
private File mConfigFile;

Lo anterior se puede configurar a través de la configuración XML:

<option name="config-file" value="/tmp/file" />

o a través del comando:

--config-file /tmp/file

Descripción

La función te permite resolver @Options de tipo File que son remotas en un archivo local para que esté disponible sin problemas desde el punto de vista del usuario.

Para que esto funcione, el archivo debe especificarse con una ruta 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) donde 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 puede usar la prueba.

Si no se puede descargar el archivo remoto por algún motivo, Tradefed mostrará una ConfigurationException que impedirá que se ejecute la prueba. Consideramos que la falta de esos archivos es una falla crítica, 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
  • optional: El valor predeterminado es false. Si se establece en true y falla la resolución, no mostrará 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á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 las que se puede descargar. Actualmente, la resolución de @Option solo está habilitada para la configuración principal de XML de Tradefed.

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 algunas 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 del proveedor (VTS), no lo habilitarán.

Implementa un protocolo nuevo

Los protocolos admitidos tienen una implementación en Tradefed de la interfaz IRemoteFileResolver , que define la etiqueta corta del protocolo que se comparará 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 de servicios META-INF del arnés para activar oficialmente la compatibilidad.