Pour comprendre cette section, commencez par étudier l'option Tradefed @Option.
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 d'option de fichier :
@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 via la commande :
--config-file /tmp/file
Description
Cette fonctionnalité vous permet de résoudre les options @Options de type fichier qui sont distantes dans un fichier local afin 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 pointe vers un fichier stocké dans un bucket Google Cloud Storage (GCS). Lorsque Tradefed voit ce chemin distant, il tente de télécharger le fichier localement et de l'attribuer à l'option @Option. La variable mConfigFile pointe alors 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ère une ConfigurationException qui empêche 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 ?. 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
trueet que le fichier téléchargé est un fichier ZIP, il sera automatiquement décompressé dans un emplacement temporaire. Exemple :?unzip=true - optional : la valeur par défaut est
false. Si la valeur est définie surtrueet que la résolution échoue, aucune exception n'est générée et le fichier n'est pas remplacé. Exemple :?optional=true
Vous pouvez également transmettre des arguments de requête globaux via --dynamic-download-args key=value, qui transmettra la paire clé/valeur à tous les téléchargements dynamiques tentés dans l'appel.
Protocoles compatibles
Les protocoles officiellement compatibles et leurs formats correspondants sont les suivants :
- 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 XML Tradefed principale.
Si vous exécutez une suite, les modules actuels (AndroidTest.xml) ne résolvent pas les fichiers par défaut.
Cela permet d'empêcher les modules de créer des dépendances inconnues. Vous
pouvez contourner ce problème en utilisant --enable-module-dynamic-download au niveau de la suite,
mais les suites principales telles que la suite de tests de compatibilité
(CTS) et la suite de tests du fournisseur
(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 la balise courte du protocole qui sera mise 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.