Cargar protocolos a través de la configuración global

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

Las opciones típicas de Tradefed permiten que las clases de prueba reciban información adicional desde la configuración XML o la línea de comandos. 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 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 le permite resolver las @Opciones de tipo de archivo 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 ahora apunte 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 evitará que se ejecute la prueba. Consideramos que perder esos archivos es una falla crítica, ya que también faltarán algunos artefactos de prueba.

Uso de 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 incorporados disponibles:

  • descomprimir: 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 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 --dynamic-download-args key=value que pasará la clave/valor a todas las descargas dinámicas que se intentaron en la invocación.

Protocolos compatibles

Los protocolos soportados oficialmente 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 desde donde descargar. La resolución de @Option está habilitada actualmente 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 está destinado a evitar que los módulos creen algunas dependencias desconocidas . Esto se puede evitar usando --enable-module-dynamic-download en el nivel de la suite, pero las suites principales, como la Suite de pruebas de compatibilidad (CTS) y la Suite de pruebas de proveedores (VTS) , no lo habilitarán.

Implementación de un nuevo protocolo.

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