Protokolle mit globaler Konfiguration laden

Um diesen Abschnitt zu verstehen, solltest du dich zuerst mit der Tradefed-@Option vertraut machen.

Mit den üblichen Optionen in Tradefed können Testklassen zusätzliche Informationen aus der XML-Konfiguration oder der Befehlszeile erhalten. Mit dieser Funktion können Sie einen zusätzlichen Schritt ausführen und einige dieser zusätzlichen Informationen bei Bedarf klären.

Beispiel für eine Dateioption

Beispieldatei für @option:

@Option(name = 'config-file')
private File mConfigFile;

Das kann über die XML-Konfiguration festgelegt werden:

<option name="config-file" value="/tmp/file" />

oder über den Befehl:

--config-file /tmp/file

Beschreibung

Mit dieser Funktion können Sie @Options vom Dateityp, die sich aus der Ferne befinden, in eine lokale Datei auflösen, damit sie für Nutzer nahtlos verfügbar sind.

Damit dies funktioniert, muss die Datei mit einem Remote-Pfad angegeben werden. Beispiel:

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

Dieser Pfad verweist auf eine Datei in einem Google Cloud Storage-Bucket (GCS-Bucket), in dem sie gespeichert ist. Tradefed versucht dann, die Datei lokal herunterzuladen und der @Option zuzuweisen. Dies führt dazu, dass die Variable mConfigFile jetzt auf die lokale Version der Datei verweist, die vom Test verwendet werden kann.

Wenn die Remotedatei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException aus, die den Test verhindert. Wir betrachten das Fehlen dieser Dateien als kritischen Fehler, da auch einige Testartefakte fehlen.

Abfrageparameter verwenden

Mit ? können Sie einer URL Abfrageparameter hinzufügen. Beispiel: gs://bucket/path?unzip=true. Der Schlüssel/Wert unzip=true ist in der Implementierung der IRemoteFileResolver-Schnittstelle verfügbar.

Es stehen zwei integrierte Verhaltensweisen zur Verfügung:

  • unzip: Wenn diese Option auf true festgelegt ist und die heruntergeladene Datei eine ZIP-Datei ist, wird sie automatisch an einem temporären Speicherort entpackt. Beispiel: ?unzip=true
  • Optional. Die Standardeinstellung ist false. Wenn true festgelegt ist und die Auflösung fehlschlägt, wird keine Ausnahme ausgelöst und die Datei wird einfach nicht ersetzt. Beispiel: ?optional=true

Du kannst auch globale Abfrageargumente über --dynamic-download-args key=value übergeben. Dadurch werden der Schlüssel/Wert an alle dynamischen Downloads übergeben, die bei der Aufrufung versucht werden.

Unterstützte Protokolle

Die offiziell unterstützten Protokolle und ihre entsprechenden Formate sind:

  • Google Cloud Storage, Protokoll: gs, Format: gs://<bucket name>/path
  • Lokale Dateien, Protokoll: file, Format: file:/local/path
  • http-Links, Protokoll: http, Format: http://url
  • HTTPS-Links, Protokoll: https, Format: https://url

Beschränkungen

Die dynamische Auflösung von @Option unterstützt derzeit nur eine begrenzte Anzahl von Protokollen und Downloadorten. Die Auflösung von @Option ist derzeit nur für die Haupt-XML-Tradefed-Konfiguration aktiviert.

Bei Ausführung als Suite werden die Dateien von den aktuellen Modulen (AndroidTest.xml) nicht standardmäßig aufgelöst. Damit soll verhindert werden, dass Module unbekannte Abhängigkeiten erstellen. Dafür kann --enable-module-dynamic-download auf Suite-Ebene verwendet werden. Bei größeren Suiten wie der Kompatibilitätstest-Suite (CTS) und der Vendor Test Suite (VTS) wird sie jedoch nicht aktiviert.

Neues Protokoll implementieren

Die unterstützten Protokolle haben in Tradefed eine Implementierung der IRemoteFileResolver-Schnittstelle, die das Kurz-Tag des Protokolls definiert, das im Dateipfad über getSupportedProtocol abgeglichen wird. Beispielsweise wird gs für das Google Cloud Storage-Protokoll verwendet. Wir empfehlen die Implementierung von #resolveRemoteFiles(RemoteFileResolverArgs), da diese Benutzeroberfläche langfristig gepflegt wird.

Die implementierten Protokolle können der Datei harness META-INF services hinzugefügt werden, um die Unterstützung offiziell zu aktivieren.