Carga protocolos con configuración global

Para comprender esta sección, primero estudia el curso @Option

Las opciones típicas de Tradefed permiten que las clases de prueba reciban de la línea de comandos o de la configuración XML. Esta función te permite dar un paso extra y resolver parte de esta información adicional si necesario.

Ejemplo de opción de archivo

Archivo de ejemplo @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 con un comando:

--config-file /tmp/file

Descripción

Esta función permite resolver las @Options de tipo archivo que son remotas en una que el archivo local esté disponible sin inconvenientes 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 se almacenan. Cuando se ve la ruta de acceso remota, el intercambio intentará descargar el archivo de forma local y asignarla a @Option. Esto da como resultado la variable mConfigFile para apuntar a la versión local del archivo, que puede usar la prueba.

Si por algún motivo no se puede descargar el archivo remoto, Tradefed arrojará un mensaje ConfigurationException que impedirá que se ejecute la prueba Consideramos si faltan esos archivos, se producirá un error crítico, ya que también habrá algunos artefactos de prueba que faltaban.

Usa parámetros de consulta

Es posible agregar parámetros de consulta a una URL con ?. Por ejemplo, gs://bucket/path?unzip=true. La clave-valor unzip=true estará disponible en la clase IRemoteFileResolver interfaz para implementarlos.

Hay dos comportamientos integrados disponibles:

  • descomprimir: Si se establece en true y el archivo descargado es un zip, se se descomprimen 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 arrojará una excepción y simplemente no reemplazará el archivo. Ejemplo: ?optional=true

También puedes pasar argumentos de consulta global a través de --dynamic-download-args key=value. que transferirá el par clave-valor a todas las descargas dinámicas que se intentaron en la invocación.

Protocolos compatibles

Los protocolos oficiales compatibles 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

La resolución dinámica de @Option actualmente solo admite un número limitado de protocolos y ubicaciones desde las cuales descargar. La resolución actual de @Option es esta opción solo está habilitada para la configuración principal XML de Tradefed.

Si se ejecuta como un paquete, los módulos actuales (AndroidTest.xml) no resolverán el problema de forma predeterminada. El objetivo de esto es evitar que los módulos creen dependencias desconocidas. Esta se puede escapar usando --enable-module-dynamic-download a nivel del paquete. pero los paquetes más importantes, como el Conjunto de pruebas de compatibilidad (CTS) y Conjunto de pruebas de proveedores (VTS) no la habilitará.

Implementa un protocolo nuevo

Los protocolos admitidos tienen una implementación en Tradefed de la IRemoteFileResolver ,que define la etiqueta corta del protocolo que coincidirá en el a través de getSupportedProtocol. Por ejemplo, gs se usa para lo siguiente: el protocolo de Google Cloud Storage. La interfaz recomendada para implementar es #resolveRemoteFiles(RemoteFileResolverArgs), que será el plan a largo plazo mantenida.

Los protocolos implementados se pueden agregar al uso del agente META-INF servicios para activar oficialmente la compatibilidad.