Protokolle mit globaler Konfiguration laden

Um diesen Abschnitt zu verstehen, sollten Sie sich zuerst mit der Tradefed-@Option vertraut machen.

Mit typischen 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 durchführen und einige dieser zusätzlichen Informationen bei Bedarf korrigieren.

Beispiel für Dateioption

Beispieldatei @option:

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

Die oben genannten Einstellungen können über die XML-Konfiguration festgelegt werden:

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

oder über einen Befehl:

--config-file /tmp/file

Beschreibung

Mit dieser Funktion können Sie @Options vom Typ „Datei“, die sich auf eine Remotedatei beziehen, in eine lokale Datei auflösen, sodass sie für Nutzer nahtlos verfügbar sind.

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

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

Dieser Pfad verweist auf eine Datei in einem Google Cloud Storage-Bucket (GCS), in dem sie gespeichert ist. Wenn Tradefed diesen Remote-Pfad sieht, wird versucht, die Datei lokal herunterzuladen und der @Option zuzuweisen. Dadurch verweist die Variable mConfigFile jetzt auf die lokale Version der Datei, die vom Test verwendet werden kann.

Wenn die Remotedatei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException aus, die verhindert, dass der Test ausgeführt wird. Das Fehlen dieser Dateien werten wir 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. Das Schlüssel/Wert-Paar unzip=true ist in der Implementierung der IRemoteFileResolver-Schnittstelle verfügbar.

Es gibt zwei integrierte Verhaltensweisen:

  • 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

Sie können auch globale Abfrageargumente über --dynamic-download-args key=value übergeben, mit denen der Schlüssel/Wert an alle dynamischen Downloads übergeben wird, die im Aufruf 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 Download-Standorten. Die Auflösung von @Option ist derzeit nur für die Tradefed-Haupt-XML-Konfiguration aktiviert.

Wenn die Ausführung als Suite erfolgt, werden die Dateien in den aktuellen Modulen (AndroidTest.xml) standardmäßig nicht aufgelöst. So soll verhindert werden, dass Module unbekannte Abhängigkeiten erstellen. Dies kann auf Suite-Ebene mit --enable-module-dynamic-download umgangen werden. Bei wichtigen Suites wie der Compatibility Test Suite (CTS) und der Vendor Test Suite (VTS) ist dies jedoch nicht möglich.

Neues Protokoll implementieren

Die unterstützten Protokolle haben eine Implementierung in Tradefed der IRemoteFileResolver-Schnittstelle, die das Kurz-Tag des Protokolls definiert, das im Dateipfad über getSupportedProtocol abgeglichen wird. gs wird beispielsweise für das Google Cloud Storage-Protokoll verwendet. Die empfohlene Schnittstelle für die Implementierung ist #resolveRemoteFiles(RemoteFileResolverArgs). Sie wird langfristig unterstützt.

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