Ładowanie protokołów z konfiguracją globalną

Aby zrozumieć tę sekcję, najpierw zapoznaj się z Tradefed @Option.

Typowe opcje w Tradefed umożliwiają klasom testów otrzymywanie dodatkowych informacji z konfiguracji XML lub wiersza poleceń. Ta funkcja umożliwia wykonanie dodatkowego kroku i w razie potrzeby rozwiązanie niektórych z tych dodatkowych informacji.

Przykład opcji pliku

Przykład opcji pliku @:

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

Powyższe ustawienia można skonfigurować za pomocą konfiguracji XML:

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

lub za pomocą polecenia:

--config-file /tmp/file

Opis

Ta funkcja umożliwia rozwiązywanie zdalnych opcji @typu File w pliku lokalnym, aby były one bezproblemowo dostępne z punktu widzenia użytkownika.

Aby to działało, plik musi być określony za pomocą ścieżki w stylu zdalnym. Przykład:

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

Ta ścieżka wskazuje plik przechowywany w zasobniku Google Cloud Storage (GCS). Gdy Tradefed zobaczy tę ścieżkę zdalną, spróbuje pobrać plik lokalnie i przypisać go do opcji @. Dzięki temu zmienna mConfigFile będzie teraz wskazywać lokalną wersję pliku, której można używać w teście.

Jeśli nie można pobrać pliku zdalnego z jakiegokolwiek powodu, Tradefed zgłosi wyjątek ConfigurationException, który uniemożliwi uruchomienie testu. Uważamy, że brak tych plików jest poważnym błędem, ponieważ brakuje też niektórych artefaktów testowych.

Używanie parametrów zapytania

Do adresu URL można dodawać parametry zapytania za pomocą znaku ?. Na przykład gs://bucket/path?unzip=true. Para klucz-wartość unzip=true będzie dostępna w implementacji interfejsu IRemoteFileResolver.

Dostępne są 2 wbudowane zachowania:

  • unzip: jeśli ta opcja jest ustawiona na true, a pobrany plik jest plikiem zip, zostanie on automatycznie rozpakowany w lokalizacji tymczasowej. Przykład: ?unzip=true
  • optional: domyślnie ma wartość false. Jeśli ta opcja jest ustawiona na true, a rozwiązanie nie powiedzie się, nie zostanie zgłoszony wyjątek, a plik nie zostanie zastąpiony. Przykład: ?optional=true

Możesz też przekazywać globalne argumenty zapytania za pomocą --dynamic-download-args key=value, które przekazują parę klucz-wartość do wszystkich dynamicznych pobrań wykonywanych w ramach wywołania.

Obsługiwane protokoły

Oficjalnie obsługiwane protokoły i odpowiadające im formaty to:

  • Google Cloud Storage, protokół: gs, format: gs://<bucket name>/path
  • Pliki lokalne, protokół: file, format: file:/local/path
  • Linki http, protokół: http, format: http://url
  • Linki https, protokół: https, format: https://url

Ograniczenia

Dynamiczne rozwiązywanie opcji @obecnie obsługuje tylko ograniczoną liczbę protokołów i lokalizacji, z których można pobierać pliki. Rozwiązywanie opcji @jest obecnie włączone tylko w przypadku głównej konfiguracji XML Tradefed.

Jeśli uruchamiasz test jako pakiet, bieżące moduły (AndroidTest.xml) domyślnie nie będą rozwiązywać plików. Ma to zapobiec tworzeniu przez moduły nieznanych zależności. Można to obejść, używając --enable-module-dynamic-download na poziomie pakietu, ale główne pakiety, takie jak Compatibility Test Suite (CTS) i Vendor Test Suite (VTS), nie będą go włączać.

Implementowanie nowego protokołu

Obsługiwane protokoły mają implementację w Tradefed interfejsu IRemoteFileResolver interface , który definiuje krótki tag protokołu, który będzie dopasowywany w ścieżce pliku za pomocą getSupportedProtocol. Na przykład gs jest używany w przypadku protokołu Google Cloud Storage. Zalecany interfejs do implementacji to #resolveRemoteFiles(RemoteFileResolverArgs), który będzie interfejsem długoterminowym.

Zaimplementowane protokoły można dodać do pliku usług META-INF harness , aby oficjalnie włączyć obsługę.