Pour comprendre cette section, commencez par étudier @Option dans Tradefed.
Les options classiques 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 d'aller plus loin 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;
Les éléments ci-dessus peuvent être définis via la configuration XML :
<option name="config-file" value="/tmp/file" />
ou à l'aide de la commande suivante :
--config-file /tmp/file
Description
Cette fonctionnalité vous permet de résoudre les @Options de type fichier qui sont distantes dans un fichier local pour qu'elles soient disponibles de manière transparente pour l'utilisateur.
Pour que cela fonctionne, le fichier doit être spécifié avec un chemin de style distant. Exemple :
--config-file gs://bucket/tmp/file
Ce chemin d'accès pointe vers un fichier stocké dans un bucket Google Cloud Storage (GCS). Lorsque Tradefed détecte ce chemin d'accès distant, il tente de télécharger le fichier en local et de l'attribuer à l'@Option. 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 générera une ConfigurationException
qui empêchera l'exécution du test. Nous considérons l'absence de ces fichiers comme un échec critique, car certains artefacts de test seront également manquants.
Utiliser des paramètres de requête
Il est possible d'ajouter des paramètres de requête à une URL à l'aide de ?
. Par exemple, gs://bucket/path?unzip=true
. La paire clé/valeur unzip=true
sera disponible dans l'implémentation de l'interface IRemoteFileResolver.
Deux comportements intégrés sont disponibles :
- unzip : si la valeur est définie sur
true
et que le fichier téléchargé est un fichier ZIP, il sera automatiquement décompressé dans un emplacement temporaire. Exemple :?unzip=true
- (facultatif) La valeur par défaut est
false
. Si la valeur est définie surtrue
et que la résolution échoue, aucune exception n'est générée et le fichier n'est tout simplement pas remplacé. Exemple :?optional=true
Vous pouvez également transmettre des arguments de requête globale via --dynamic-download-args key=value
, qui transmettront la paire clé/valeur à tous les téléchargements dynamiques tentés dans l'invocation.
Protocoles compatibles
Voici les protocoles officiellement acceptés et les formats correspondants :
- 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 n'est actuellement compatible qu'avec un nombre limité de protocoles et d'emplacements de téléchargement. La résolution de @Option n'est actuellement activée que pour la configuration Tradefed XML principale.
Si vous exécutez le module en tant que suite, les modules actuels (AndroidTest.xml
) ne résoudront pas les fichiers par défaut.
Cela permet d'empêcher les modules de créer des dépendances inconnues. Vous pouvez y échapper en utilisant --enable-module-dynamic-download
au niveau de la suite, mais les suites principales telles que la Compatibility Test Suite (CTS) et la Vendor Test Suite (VTS) ne l'activeront pas.
Implémenter un nouveau protocole
Les protocoles compatibles ont une implémentation dans Tradefed de l'interface IRemoteFileResolver, qui définit le tag court du protocole qui sera mis en correspondance dans le chemin d'accès au 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 META-INF services du harnais pour activer officiellement la prise en charge.