Carica i protocolli con la configurazione globale

Per comprendere questa sezione, studia prima l'opzione @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 passo in più e risolvere alcune di queste informazioni aggiuntive, se necessario.

Esempio di opzione file

Esempio di opzione @File:

@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 comando:

--config-file /tmp/file

Descrizione

La funzionalità consente di risolvere le opzioni @Option di tipo File che sono remote in un file locale per renderle disponibili senza problemi dal punto di vista dell'utente.

Affinché questa operazione funzioni, il file deve essere specificato con un percorso di stile remoto. Ad esempio:

--config-file gs://bucket/tmp/file

Questo percorso rimanda a un file all'interno di un bucket Google Cloud Storage (GCS) in cui è archiviato. Quando Tradefed rileva questo percorso remoto, tenta di scaricare il file localmente e di assegnarlo all'opzione @Option. Di conseguenza, la variabile mConfigFile ora rimanda alla versione locale del file, che può essere utilizzata dal test.

Se il file remoto non può essere scaricato per qualsiasi motivo, Tradefed genera un'eccezione ConfigurationException che impedisce 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

È possibile aggiungere parametri di query a un URL 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
  • optional: il valore predefinito è false. Se impostato su true e la risoluzione non riesce, 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 passerà la coppia chiave-valore a tutti i download dinamici tentati nella chiamata.

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 al momento supporta solo un numero limitato di protocolli e località da cui scaricare. La risoluzione di @Option è attualmente abilitata solo per la configurazione XML principale di Tradefed.

Se esegui come suite, i moduli correnti (AndroidTest.xml) non risolveranno i file per impostazione predefinita. Questo serve a impedire ai moduli di creare alcune dipendenze sconosciute. Puoi evitare questo comportamento utilizzando --enable-module-dynamic-download a livello di suite, ma le suite principali come Compatibility Test Suite (CTS) e Vendor Test Suite (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 mantenuta a lungo termine.

I protocolli implementati possono essere aggiunti al file di servizi META-INF dell'infrastruttura per attivare ufficialmente il supporto.