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 entrue
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.