Android 9 umożliwia uzyskiwanie nazwy usługi dla danej instancji HAL na podstawie urządzenia, na którym uruchomione są testy VTS dostawcy zewnętrznego. Uruchamianie testów VTS HAL z uwzględnieniem nazwy usługi umożliwia deweloperom zautomatyzowanie testowania rozszerzeń dostawców, wielu HAL-i i wielu instancji HAL-i zarówno w przypadku testów VTS po stronie docelowej, jak i po 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 przełączyć się na domyślną nazwę usługi. Wady tego podejścia:
- poleganie na wiedzy dewelopera testu w celu ustawienia prawidłowej nazwy usługi;
- Domyślnie ogranicza testowanie do pojedynczej instancji usługi.
- Ręczna konserwacja nazw usług (np. nazwy są zakodowane na stałe, dlatego w przypadku zmiany nazwy usługi trzeba je aktualizować 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 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 dostarczonych 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 uruchomionych instancji usługi i uzyskiwanie nazwy usługi dla każdej instancji (pobieranie na podstawie
vendor/manifest.xml
); - Obliczam wszystkie kombinacje instancji (na potrzeby 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 na potrzeby testowania nazw usług 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(); }
Dodatkowe przykłady znajdziesz tutaj: VtsHalCameraProviderV2_4TargetTest.cpp
.
Testy VTS po stronie hosta
Testy po stronie hosta VTS uruchamiają skrypty testowe po stronie hosta zamiast testowych plików binarnych 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 kierowanie usług HAL w teście.
hal_hidl_host_test
(podklasa klasyparam_test
) pobiera zarejestrowane testowe HAL ze skryptu testowego, identyfikuje odpowiednie nazwy usług na potrzeby testowania HAL, a następnie generuje kombinacje nazw usług (na potrzeby testowania wielu HAL) jako parametry testowe. 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 nowy przypadek testowy z parametrami (N = rozmiar parametrów), każdy z określonym parametrem.
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" }
- Zadzwoń do użytkownika
getHalServiceName()
i przekaż nazwę, aby zainicjować 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
W poprzednich wersjach Androida narzędzie VTS wykrywało testową wartość HAL 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 narzędzie VTS identyfikuje testową wartość HAL, wykorzystując świadomość nazwy usługi. Zarejestrowane wartości HAL testów są też przydatne w przypadku:
- Kontrole 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).