Laden Sie Protokolle mit globaler Konfiguration

Um diesen Abschnitt zu verstehen, studieren Sie zunächst die @Option von Tradefed.

Typische Optionen in Tradefed ermöglichen es Testklassen, zusätzliche Informationen aus der XML-Konfiguration oder der Befehlszeile zu erhalten. Mit dieser Funktion können Sie bei Bedarf einen Schritt weiter gehen und einige dieser zusätzlichen Informationen klären.

Beispiel für eine Dateioption

Beispieldatei @option:

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

Das Obige kann über die XML-Konfiguration eingestellt werden:

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

oder per Befehl:

--config-file /tmp/file

Beschreibung

Mit dieser Funktion können Sie dateitypisierte @Optionen, die remote sind, in eine lokale Datei auflösen, um aus Benutzersicht nahtlos verfügbar zu sein.

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

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

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

Wenn die Remote-Datei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException aus, die die Ausführung des Tests verhindert. Wir halten das Fehlen dieser Dateien für einen kritischen Fehler, da auch einige Testartefakte fehlen werden.

Verwenden Sie Abfrageparameter

Das Hinzufügen von Abfrageparametern zu einer URL ist mit ? möglich. . 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 auf true gesetzt und die heruntergeladene Datei eine ZIP-Datei ist, wird sie automatisch an einen temporären Speicherort entpackt. Beispiel: ?unzip=true
  • optional: Der Standardwert ist false . Wenn der Wert auf true gesetzt ist und die Auflösung fehlschlägt, wird keine Ausnahme ausgelöst und die Datei einfach nicht ersetzt. Beispiel: ?optional=true

Sie können auch globale Abfrageargumente über --dynamic-download-args key=value übergeben, die den Schlüssel/Wert an alle dynamischen Downloads übergeben, 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

Einschränkungen

Die dynamische Auflösung von @Option unterstützt derzeit nur eine begrenzte Anzahl von Protokollen und Speicherorten zum Herunterladen. Die Auflösung von @Option ist derzeit nur für die Hauptkonfiguration von XML Tradefed aktiviert.

Bei der Ausführung als Suite lösen aktuelle Module ( AndroidTest.xml ) die Dateien standardmäßig nicht auf. Dies soll verhindern, dass Module unbekannte Abhängigkeiten erzeugen . Dies kann durch die Verwendung von --enable-module-dynamic-download auf Suite-Ebene umgangen werden, aber große Suiten wie die Compatibility Test Suite (CTS) und die Vendor Test Suite (VTS) aktivieren dies nicht.

Implementieren Sie ein neues Protokoll

Die unterstützten Protokolle verfügen über eine Implementierung der IRemoteFileResolver-Schnittstelle in Tradefed, die das kurze Tag des Protokolls definiert, das über getSupportedProtocol im Dateipfad abgeglichen wird. Beispielsweise wird gs für das Google Cloud Storage-Protokoll verwendet. Die empfohlene zu implementierende Schnittstelle ist #resolveRemoteFiles(RemoteFileResolverArgs) , die langfristig gepflegte Schnittstelle.

Die implementierten Protokolle können zur Datei „Harness META-INF Services“ hinzugefügt werden, um die Unterstützung offiziell zu aktivieren.