Charger les protocoles avec la configuration globale

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 est true 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.