Android 9 obsługuje pobieranie nazwy usługi danej instancji HAL na podstawie urządzenia, na którym są wykonywane testy z pakietu testów dostawcy (VTS). Uruchamianie testów HAL VTS, które uwzględniają nazwę usługi, umożliwia deweloperom zautomatyzowanie testowania rozszerzeń dostawców, wielu HAL-i i wielu instancji HAL-i zarówno w ramach testów VTS na stronie docelowej, jak i na stronie hosta.
Nazwy usług
Każda instancja uruchomionej usługi HAL rejestruje się za pomocą nazwy usługi.
W poprzednich wersjach Androida deweloperzy przeprowadzający testy HAL VTS musieli ustawić prawidłową nazwę usługi dla klienta testowego w pliku getService()
lub pozostawić nazwę pustą i użyć domyślnej nazwy usługi. Wady tego podejścia:
- poleganie na wiedzy dewelopera testu w celu ustawienia prawidłowej nazwy usługi;
- Domyślnie ograniczone do testowania pojedynczej instancji usługi.
- ręczne zarządzanie nazwami usług (np. ze względu na to, że są one zakodowane na stałe, w przypadku zmiany nazwy usługi należy je zaktualizować ręcznie);
W Androidzie 9 deweloperzy mogą automatycznie pobierać nazwę usługi dla danej instancji HAL na podstawie testowanego urządzenia. Zalety tego podejścia to m.in. możliwość testowania:
- Rozszerzenia HAL dostawcy. Jeśli na przykład dostawca ma implementację interfejsu HAL camera.provider, która działa na urządzeniach dostawcy z niestandardową nazwą usługi, VTS może zidentyfikować instancję dostawcy i przeprowadzić test.
- Wiele instancji HAL. Jeśli na przykład
graphics.composer
HAL ma 2 instancje (jedną o nazwie usługi „default”, a drugą o nazwie usługi „vr”), VTS może zidentyfikować obie instancje i przeprowadzić test w przypadku każdej z nich. - Testowanie z użyciem wielu HAL. Używany podczas testowania wielu HAL-i z wieloma instancjami. Na przykład podczas uruchamiania testu VTS, który sprawdza, jak działają razem kluczowy i bramkowy HAL, VTS może przetestować wszystkie kombinacje instancji usługi dla tych HAL-i.
Testy po stronie docelowej
Aby umożliwić rozpoznawanie nazwy usługi w ramach testów na stronie docelowej, Android 9 zawiera konfigurowalne środowisko testowe (VtsHalHidlTargetTestEnvBase
), które udostępnia interfejsy do:
- Zarejestruj kierowane HAL-e w teście.
- Wyświetla listę wszystkich zarejestrowanych HAL-i.
- Pobieranie nazw usług dla zarejestrowanych HAL-i dostarczanych przez framework VTS.
Dodatkowo framework VTS zapewnia obsługę w czasie wykonywania dla:
- wstępne przetworzenie binarnego pliku testowego w celu uzyskania wszystkich zarejestrowanych HAL-i testowych;
- identyfikowanie wszystkich działających instancji usługi i uzyskiwanie nazwy usługi dla każdej instancji (pobieranie na podstawie
vendor/manifest.xml
); - Obliczanie wszystkich kombinacji instancji (w celu obsługi testowania wielu HAL).
- Generowanie nowego testu dla każdego wystąpienia usługi (połączenia).
Przykład:
Konfigurowanie testów po stronie docelowej z uwzględnieniem nazwy usługi
Aby skonfigurować środowisko testowe do testowania z uwzględnieniem nazwy usługi po stronie docelowej:
- Zdefiniuj
testEnvironment
na podstawieVtsHalHidlTargetTestEnvBase
i zarejestruj testowe HAL:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Aby przekazać
getServiceName()
, użyj nazwy usługi podanej przez środowisko testowe:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Zarejestruj środowisko testowe w
main()
iinitTest
:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
Więcej przykładów znajdziesz w VtsHalCameraProviderV2_4TargetTest.cpp
.
Testy VTS po stronie hosta
Testy VTS po stronie hosta uruchamiają skrypty testowe po stronie hosta, a nie testowe pliki binarne na urządzeniu docelowym. Aby umożliwić rozpoznawanie nazwy usługi w przypadku tych testów, możesz użyć szablonów po stronie hosta, aby uruchomić ten sam skrypt testowy kilka razy z różnymi parametrami (podobnie jak w przypadku testu parametryzowanego gtest).
- Skrypt hal test określa usługi HAL do kierowania w teście.
- Funkcja
hal_hidl_host_test
(podklasaparam_test
) pobiera zarejestrowane HAL-e testowe ze skryptu testowego, identyfikuje odpowiadające nazwy usług dla testowanego HAL-a, a następnie generuje kombinacje nazw usług (na potrzeby testowania wielu HAL-i) jako parametry testu. Udostępnia też metodęgetHalServiceName()
, która zwraca nazwę odpowiedniej usługi na podstawie parametru przekazanego bieżącemu testowi. - Szablon param_test obsługuje logikę, która przyjmuje listę parametrów i uruchamia wszystkie podane przypadki testowe dla każdego parametru. Oznacza to, że dla każdego przypadku testowego generuje N nowych przypadków testowych z parametrami (N = wielkość parametrów), z których każdy zawiera dany parametr.
Konfigurowanie testów po stronie hosta z uwzględnieniem nazwy usługi
Aby skonfigurować środowisko testowe do testowania po stronie hosta z uwzględnieniem nazwy usługi:
- W skrypcie testowym określ docelową usługę HAL:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Wywołaj funkcję
getHalServiceName()
i przekaż jej nazwę do funkcji init hal:self.dut.hal.InitHidlHal( target_type='foo', target_basepaths=self.dut.libPaths, target_version=1.0, target_package='android.hardware.foo', target_component_name='IFoo', hw_binder_service_name =self.getHalServiceName("android.hardware.foo@1.0::IFoo"), bits=int(self.abi_bitness))
Więcej przykładów znajdziesz w VtsHalMediaOmxStoreV1_0HostTest.py
.
Rejestrowanie testowych interfejsów HAL
We wcześniejszych wersjach Androida VTS rozpoznawał interfejs HAL do testowania za pomocą opcji <precondition-lshal>
skonfigurowanej w AndroidTest.xml
. Takie podejście było trudne do utrzymania (oparte na prawidłowym konfigurowaniu testu i odpowiednim aktualizowaniu konfiguracji przez deweloperów) oraz nieprecyzyjne (zawierało tylko informacje o pakiecie i wersji, a nie o interfejsie).
W Androidzie 9 VTS identyfikuje testowany HAL za pomocą rozpoznawania nazwy usługi. Zarejestrowane interfejsy HAL do testowania są też przydatne do:
- Sprawdzanie warunków wstępnych. Przed uruchomieniem testu HAL VTS może sprawdzić, czy testowany interfejs HAL jest dostępny na urządzeniu docelowym, i jeśli nie jest, pominąć testy (patrz sprawdzanie możliwości testowania VTS).
- Pomiar zasięgu. VTS obsługuje pomiar pokrycia kodu w różnych procesach dzięki znajomości usług HAL do testowania, które chce mierzyć (czyli do czyszczenia pokrycia w procesie usługi HAL).