Aby zrozumieć tę sekcję, najpierw zapoznaj się z informacjami o @Option w Tradefed.
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 problemu z niektórymi z tych dodatkowych informacji.
Przykład opcji pliku
Przykładowy plik @option:
@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 przekształcanie zdalnych opcji @Options typu File w lokalny plik, który jest bezproblemowo dostępny z punktu widzenia użytkownika.
Aby to zadział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 on przechowywany. Gdy Tradefed zobaczy ścieżkę zdalną, spróbuje pobrać plik lokalnie i przypisać go do @Option. W rezultacie zmienna mConfigFile
będzie teraz wskazywać lokalną wersję pliku, która może być używana przez test.
Jeśli z jakiegokolwiek powodu nie można pobrać pliku zdalnego, Tradefed zgłosi błądConfigurationException
, 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
Parametry zapytania można dodać do adresu URL 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 działania:
- unzip: jeśli ta opcja ma wartość
true
, a pobrany plik jest plikiem ZIP, zostanie on automatycznie rozpakowany w lokalizacji tymczasowej. Przykład:?unzip=true
- opcjonalnie: domyślnie
false
. Jeśli to ustawienie ma wartość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ń podejmowanych w wywołaniu.
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 @Option obsługuje obecnie tylko ograniczoną liczbę protokołów i lokalizacji, z których można pobierać dane. Rozwiązanie @Option jest obecnie włączone tylko w przypadku głównej konfiguracji XML Tradefed.
Jeśli moduł jest uruchamiany jako pakiet, bieżące moduły (AndroidTest.xml
) domyślnie nie będą rozpoznawać plików.
Ma to zapobiec tworzeniu przez moduły nieznanych zależności. Można to pominąć, używając --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 włączać.
Wdrażanie nowego protokołu
Obsługiwane protokoły mają w Tradefed implementację interfejsu IRemoteFileResolver, który definiuje krótki tag protokołu, który będzie dopasowywany w ścieżce pliku za pomocą getSupportedProtocol
. Na przykład protokół Google Cloud Storage używa znaku gs
. Zalecany interfejs do wdrożenia to #resolveRemoteFiles(RemoteFileResolverArgs)
, który będzie długoterminowo utrzymywany.
Wdrożone protokoły można dodać do pliku META-INF services w pakiecie, aby oficjalnie włączyć obsługę.