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ę.