Afin de comprendre cette section, étudiez d'abord le Tradefed @Option .
Les options typiques de Tradefed permettent aux classes de test de recevoir des informations supplémentaires à partir de la configuration XML ou de la ligne de commande. Cette fonctionnalité vous permet de franchir une étape supplémentaire et de résoudre certaines de ces informations supplémentaires si nécessaire.
Exemple d'option de fichier
Exemple de fichier @option :
@Option(name = 'config-file')
private File mConfigFile;
Ce qui précède peut être défini via la configuration XML :
<option name="config-file" value="/tmp/file" />
ou via commande :
--config-file /tmp/file
Description
La fonctionnalité vous permet de résoudre les @Options typées par fichier qui sont distantes dans un fichier local pour qu'elles soient disponibles de manière transparente du point de vue de l'utilisateur.
Pour que cela fonctionne, le fichier doit être spécifié avec un chemin de style distant . Par exemple:
--config-file gs://bucket/tmp/file
Ce chemin pointe vers un fichier dans un bucket Google Cloud Storage (GCS) où il est stocké. Tradefed, après avoir vu ce chemin distant, tentera de télécharger le fichier localement et de l'attribuer à l'@Option. Cela fait que la variable mConfigFile
pointe désormais vers la version locale du fichier, qui peut être utilisée par le test.
Si le fichier distant ne peut pas être téléchargé pour une raison quelconque, Tradefed lancera une ConfigurationException
qui empêchera l'exécution du test. Nous considérons que l'absence de ces fichiers constitue un échec critique, car certains artefacts de test seront également manquants.
Utiliser les paramètres de requête
L'ajout de paramètres de requête à une URL est possible en utilisant ?
. Par exemple, gs://bucket/path?unzip=true
. La clé/valeur unzip=true
sera disponible dans l’implémentation de l’interface IRemoteFileResolver .
Deux comportements intégrés sont disponibles :
- unzip : si défini sur
true
et que le fichier téléchargé est un zip, il sera automatiquement décompressé vers un emplacement temporaire. Exemple :?unzip=true
- facultatif : la valeur par défaut est
false
. Si la valeur esttrue
et que la résolution échoue, elle ne générera pas d'exception et ne remplacera tout simplement pas le fichier. Exemple :?optional=true
Vous pouvez également transmettre des arguments de requête globaux via --dynamic-download-args key=value
qui transmettra la clé/valeur à tous les téléchargements dynamiques tentés lors de l'invocation.
Protocoles pris en charge
Les protocoles officiellement pris en charge et leurs formats correspondants sont :
- Google Cloud Storage, protocole :
gs
, format :gs://<bucket name>/path
- Fichiers locaux, protocole :
file
, format :file:/local/path
- liens http, protocole :
http
, format :http://url
- liens https, protocole :
https
, format :https://url
Limites
La résolution dynamique de @Option ne prend actuellement en charge qu'un nombre limité de protocoles et d'emplacements à partir desquels télécharger. La résolution de @Option est actuellement activée uniquement pour la configuration XML Tradefed principale.
S'ils sont exécutés en tant que suite, les modules actuels ( AndroidTest.xml
) ne résoudront pas les fichiers par défaut. Ceci a pour but d'empêcher les modules de créer des dépendances inconnues . Cela peut être évité en utilisant --enable-module-dynamic-download
au niveau de la suite, mais les principales suites telles que Compatibility Test Suite (CTS) et Vendor Test Suite (VTS) ne l'activeront pas.
Mettre en œuvre un nouveau protocole
Les protocoles pris en charge ont une implémentation dans Tradefed de l' interface IRemoteFileResolver , qui définit la balise courte du protocole qui sera mise en correspondance dans le chemin du fichier via getSupportedProtocol
. Par exemple, gs
est utilisé pour le protocole Google Cloud Storage. L'interface recommandée à implémenter est #resolveRemoteFiles(RemoteFileResolverArgs)
qui sera l'interface maintenue à long terme.
Les protocoles implémentés peuvent être ajoutés au fichier des services Harness META-INF pour activer officiellement le support.