Ł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 uzupełnienie niektórych dodatkowych informacji.

Przykład opcji pliku

Przykładowy plik @option:

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

Powyższe ustawienia można określić 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 opcji typu @Options w pliku, które znajdują się zdalnie, w lokalnym pliku, aby były dostępne bezproblemowo z punktu widzenia użytkownika.

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

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

Ta ścieżka wskazuje plik w zasobniku Google Cloud Storage (GCS), w którym jest przechowywany. Gdy Tradefed zobaczy tę ścieżkę zdalną, spróbuje pobrać plik lokalnie i przypisać go do opcji @Option. W efekcie zmienna mConfigFile wskazuje teraz lokalną wersję pliku, z której może korzystać test.

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

Używanie parametrów zapytania

Parametry zapytania można dodawać do adresu URL za pomocą ?. 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 ustawienie to true, a pobrany plik jest plikiem ZIP, zostanie on automatycznie rozpakowany w miejscu tymczasowym. Przykład: ?unzip=true
  • opcjonalnie: domyślnie false. Jeśli ustawisz wartość true, a rozdzielczość nie powiedzie się, nie zostanie wyrzucone żadne wyjątek, a plik nie zostanie zastąpiony. Przykład: ?optional=true

Możesz też przekazywać argumenty zapytania globalnego za pomocą funkcji --dynamic-download-args key=value, która przekazuje parę klucz-wartość do wszystkich prób pobrań dynamicznych w wywołaniu.

Obsługiwane protokoły

Oficjalnie obsługiwane protokoły i odpowiednie formaty:

  • 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

Dynamiczna rozdzielczość opcji @Option obsługuje obecnie tylko ograniczoną liczbę protokołów i lokalizacji, z których można pobierać pliki. Rozwiązanie @Option jest obecnie dostępne tylko w przypadku głównej konfiguracji XML Tradefed.

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

Wdrażanie nowego protokołu

Obsługiwane protokoły mają w Tradefed implementację interfejsu IRemoteFileResolver, która definiuje krótki tag protokołu, który zostanie dopasowany w ścieżce pliku za pomocą getSupportedProtocol. Na przykład gs jest używany w protokole Google Cloud Storage. Zalecanym interfejsem do wdrożenia jest #resolveRemoteFiles(RemoteFileResolverArgs), który będzie interfejsem utrzymanym na dłuższą metę.

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