Per comprendere questa sezione, studia prima l'@Option di Tradefed.
Le opzioni tipiche di Tradefed consentono alle classi di test di ricevere informazioni aggiuntive dalla configurazione XML o dalla riga di comando. Questa funzionalità ti consente di fare un ulteriore passo avanti e risolvere alcune di queste informazioni aggiuntive, se necessario.
Esempio di opzione file
File di esempio @option:
@Option(name = 'config-file')
private File mConfigFile;
Quanto sopra può essere impostato tramite la configurazione XML:
<option name="config-file" value="/tmp/file" />
o tramite il comando:
--config-file /tmp/file
Descrizione
La funzionalità consente di risolvere le @Opzioni di tipo File che sono remote in un file locale per renderlo disponibile senza problemi dal punto di vista dell'utente.
Affinché questa operazione funzioni, il file deve essere specificato con un percorso di stile remoto. Per esempio:
--config-file gs://bucket/tmp/file
Questo percorso punta a un file all'interno di un bucket Google Cloud Storage (GCS) in cui è
archiviato. Quando Tradefed vede questo percorso remoto, tenta di scaricare il file
localmente e di assegnarlo a @Option. Di conseguenza, la variabile mConfigFile
ora punta alla versione locale del file, che può essere utilizzata dal test.
Se il file remoto non può essere scaricato per qualsiasi motivo, Tradefed genererà un errore
ConfigurationException
che impedirà l'esecuzione del test. Consideriamo
la mancanza di questi file un errore critico, poiché mancheranno anche alcuni artefatti di test.
Utilizzare i parametri di query
L'aggiunta di parametri di ricerca a un URL è possibile utilizzando ?
. Ad esempio,
gs://bucket/path?unzip=true
. La coppia chiave/valore unzip=true
sarà disponibile nell'implementazione dell'interfaccia IRemoteFileResolver.
Sono disponibili due comportamenti integrati:
- unzip: se impostato su
true
e il file scaricato è un file ZIP, verrà decompresso automaticamente in una posizione temporanea. Esempio:?unzip=true
- (facoltativo) Il valore predefinito è
false
. Se è impostato sutrue
e la risoluzione non va a buon fine, non verrà generata un'eccezione e il file non verrà sostituito. Esempio:?optional=true
Puoi anche passare argomenti di query globali tramite --dynamic-download-args key=value
che passeranno la coppia chiave/valore a tutti i download dinamici tentati nell'invocazione.
Protocolli supportati
I protocolli supportati ufficialmente e i relativi formati sono:
- Google Cloud Storage, protocollo:
gs
, formato:gs://<bucket name>/path
- File locali, protocollo:
file
, formato:file:/local/path
- Link HTTP, protocollo:
http
, formato:http://url
- Link https, protocollo:
https
, formato:https://url
Limitazioni
La risoluzione dinamica di @Option attualmente supporta solo un numero limitato di protocolli e posizioni da cui eseguire il download. La risoluzione di @Option è attualmente attivata solo per la configurazione XML principale di Tradefed.
Se viene eseguito come suite, i moduli attuali (AndroidTest.xml
) non risolveranno i
file per impostazione predefinita.
Questo serve a impedire ai moduli di creare dipendenze sconosciute. È possibile
evitare questo problema utilizzando --enable-module-dynamic-download
a livello di suite,
ma le suite principali come la suite di test di compatibilità
(CTS) e la suite di test del fornitore
(VTS) non lo attiveranno.
Implementare un nuovo protocollo
I protocolli supportati hanno un'implementazione in Tradefed dell'interfaccia IRemoteFileResolver, che definisce il tag breve del protocollo che verrà abbinato nel percorso del file tramite getSupportedProtocol
. Ad esempio, gs
viene utilizzato per il
protocollo Google Cloud Storage. L'interfaccia consigliata da implementare è
#resolveRemoteFiles(RemoteFileResolverArgs)
, che sarà l'interfaccia
manutenuta a lungo termine.
I protocolli implementati possono essere aggiunti al file META-INF services� del framework per attivare ufficialmente il supporto.