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
truey 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 entruey 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.