Cargar protocolos con configuración global

Para comprender esta sección, primero estudie Tradefed @Option .

Las opciones típicas en Tradefed permiten que las clases de prueba reciban información adicional desde la configuración XML o la línea de comando. Esta función le 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 @opción:

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

Lo anterior se puede configurar mediante la configuración XML:

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

o mediante comando:

--config-file /tmp/file

Descripción

La función le permite resolver @Options escritas en archivos que son remotas 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 estilo remota . Por ejemplo:

--config-file gs://bucket/tmp/file

Esta ruta apunta a un archivo dentro de un depósito de Google Cloud Storage (GCS) donde está almacenado. Tradefed, al ver esa ruta remota, intentará descargar el archivo localmente y asignarlo a @Option. Esto da como resultado que la variable mConfigFile apunte ahora a la versión local del archivo, que puede ser utilizada por la prueba.

Si el archivo remoto no se puede descargar por algún motivo, Tradefed generará 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.

Usar parámetros de consulta

¿Es posible agregar parámetros de consulta a una URL usando ? . Por ejemplo, gs://bucket/path?unzip=true . La clave/valor unzip=true estará disponible en la implementación de la interfaz IRemoteFileResolver .

Hay dos comportamientos integrados disponibles:

  • descomprimir: si se establece en true y el archivo descargado es un 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 la resolución falla, no generará una excepción y simplemente no reemplazará el archivo. Ejemplo: ?optional=true

También puede pasar argumentos de consulta global a través de --dynamic-download-args key=value que pasará la clave/valor a todas las descargas dinámicas intentadas en la invocación.

Protocolos soportados

Los protocolos oficialmente soportados y sus correspondientes formatos son:

  • Google Cloud Storage, protocolo: gs , formato: gs://<bucket name>/path
  • Archivos locales, protocolo: file , formato: file:/local/path
  • enlaces http, protocolo: http , formato: http://url
  • enlaces https, protocolo: https , formato: https://url

Limitaciones

La resolución dinámica de @Option actualmente solo admite una cantidad limitada de protocolos y ubicaciones para descargar. La resolución de @Option actualmente está habilitada solo para la configuración principal de XML Tradefed.

Si se ejecuta como una suite, 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 evitar usando --enable-module-dynamic-download a nivel de suite, pero las suites principales como Compatibility Test Suite (CTS) y Vendor Test Suite (VTS) no lo habilitarán.

Implementar un nuevo protocolo

Los protocolos soportados tienen una implementación en Tradefed de la interfaz IRemoteFileResolver , que define la etiqueta corta del protocolo que coincidirá en la ruta del archivo a través de getSupportedProtocol . Por ejemplo, gs se utiliza para el protocolo 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 el soporte.