Android 9 obsługuje pobieranie nazwy usługi danej instancji HAL na podstawie urządzenia, na którym są uruchamiane testy Vendor Test Suite (VTS). Uruchamianie testów VTS HAL, które rozpoznają nazwę usługi umożliwia deweloperom automatyzację testowania rozszerzeń dostawców, wielu HAL i wielu instancji HAL zarówno po stronie docelowej, jak i po stronie hosta.
Nazwy usług
Każda instancja uruchomionej usługi HAL rejestruje się pod nazwą usługi.
W poprzednich wersjach Androida deweloperzy uruchamiający testy VTS HAL musieli
ustawić prawidłową nazwę usługi dla klienta testowego w
getService() lub pozostawić nazwę pustą i wrócić do domyślnej
nazwy usługi. Ta metoda miała następujące wady:
- Wymagała od dewelopera testu znajomości prawidłowej nazwy usługi.
- Domyślnie ograniczała się do testowania tylko jednej instancji usługi.
- Wymagała ręcznego utrzymywania nazw usług (ponieważ nazwy są zakodowane na stałe, trzeba je ręcznie aktualizować, gdy nazwa usługi się zmieni).
W Androidzie 9 deweloperzy mogą automatycznie pobierać nazwę usługi dla danej instancji HAL na podstawie testowanego urządzenia. Ta metoda ma następujące zalety:
- Rozszerzenia HAL dostawcy. Na przykład, gdy dostawca ma an implementację HAL camera.provider, która działa na urządzeniach dostawcy z a niestandardową nazwą usługi, VTS może zidentyfikować instancję dostawcy i uruchomić the test against it.
- Wiele instancji HAL. Na przykład, gdy
graphics.composerHAL ma 2 instancje (jedną z nazwą usługi „default” i drugą z nazwą usługi „vr”), VTS może zidentyfikować obie instancje i uruchomić na każdej z nich test. - Testowanie wielu HAL. Używane podczas testowania wielu HAL z wieloma instancjami. Na przykład podczas uruchamiania testu VTS, który sprawdza, jak współpracują ze sobą HAL KeyMint (wcześniej Keymaster) i Gatekeeper, VTS może przetestować wszystkie kombinacje instancji usług dla tych HAL.
Testy po stronie docelowej
Aby włączyć rozpoznawanie nazwy usługi na potrzeby testowania po stronie docelowej, Android
9 zawiera konfigurowalne środowisko testowe
(VtsHalHidlTargetTestEnvBase)
które udostępnia interfejsy do:
- rejestrowania HAL docelowych w teście;
- wyświetlania listy wszystkich zarejestrowanych HAL;
- pobierania nazw usług zarejestrowanych HAL udostępnianych przez platformę VTS.
Ponadto platforma VTS zapewnia obsługę w czasie działania:
- wstępnego przetwarzania pliku binarnego testu w celu uzyskania wszystkich zarejestrowanych HAL testu;
- identyfikowania wszystkich uruchomionych instancji usługi i pobierania nazwy usługi dla
każdej instancji (pobieranej na podstawie
vendor/manifest.xml); - obliczania wszystkich kombinacji instancji (na potrzeby testowania wielu HAL testowania);
- generowania nowego testu dla każdej instancji usługi (kombinacji).
Przykład:
Konfigurowanie testów po stronie docelowej, które rozpoznają nazwę usługi
Aby skonfigurować środowisko testowe na potrzeby testowania po stronie docelowej, które rozpoznaje nazwę usługi:
- Zdefiniuj
testEnvironmentna podstawieVtsHalHidlTargetTestEnvBasei zarejestruj HAL testu:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Użyj
getServiceName()udostępnianego przez środowisko testowe, aby przekazać nazwę usługi:::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 w
VtsHalCameraProviderV2_4TargetTest.cpp.
Testy VTS po stronie hosta
Testy VTS po stronie hosta uruchamiają skrypty testowe po stronie hosta zamiast binarnych testów na urządzeniu docelowym. Aby włączyć rozpoznawanie nazwy usługi na potrzeby tych testów, możesz użyć szablonów po stronie hosta, aby uruchomić ten sam scenariusz testowania wiele razy z różnymi parametrami (podobnie jak w przypadku testu parametryzowanego gtest).
- Skrypt hal test określa w teście usługi HAL docelowe.
- The
hal_hidl_host_test(podklasaparam_test) pobiera zarejestrowane HAL testowania ze scenariusza testowania, identyfikuje odpowiednie nazwy usług dla HAL testowania, a następnie generuje kombinacje nazw usług (na potrzeby testowania wielu HAL) jako testowe parametry. Udostępnia też metodęgetHalServiceName(), która zwraca odpowiednią nazwę usługi zgodnie z parametrem przekazanym do bieżącego przypadku testowego. - Szablon param_test obsługuje logikę akceptowania listy parametrów i uruchamiania wszystkich podanych przypadków testowych z każdym parametrem. Oznacza to, że dla każdego przypadku testowego generuje N nowych parametryzowanych przypadków testowych (N = rozmiar parametrów), z których każdy ma dany parametr.
Konfigurowanie testów po stronie hosta, które rozpoznają nazwę usługi
Aby skonfigurować środowisko testowe na potrzeby testowania po stronie hosta, które rozpoznaje nazwę usługi:
- Określ docelową usługę HAL w scenariuszu testowania:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Wywołaj
getHalServiceName()i przekaż nazwę do 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))
Dodatkowe przykłady znajdziesz w
VtsHalMediaOmxStoreV1_0HostTest.py.
Rejestrowanie HAL testu
W poprzednich wersjach Androida VTS identyfikował HAL testu za pomocą opcji
<precondition-lshal> skonfigurowanej w
AndroidTest.xml. Ta metoda była trudna w utrzymaniu (ponieważ wymagała od deweloperów prawidłowego skonfigurowania testu i odpowiedniego zaktualizowania konfiguracji) i niedokładna (ponieważ zawierała tylko informacje o pakiecie i wersji, a nie o interfejsie).
W Androidzie 9 VTS identyfikuje HAL testu za pomocą rozpoznawania nazwy usługi. Zarejestrowane HAL testu są też przydatne do:
- Sprawdzania warunków wstępnych. Przed uruchomieniem testu HAL VTS może potwierdzić, że HAL testu jest dostępny na urządzeniu docelowym, i pominąć testy jeśli nie jest (więcej informacji znajdziesz w artykule Sprawdzanie możliwości testowania VTS).
- Pomiaru pokrycia. VTS obsługuje pomiar pokrycia kodu w różnych procesach dzięki informacjom o usługach HAL testu, które chce zmierzyć (czyli opróżnić pokrycie procesu usługi HAL).