Android 9 obsługuje uzyskiwanie 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ą nazwy usług, umożliwia deweloperom automatyzację testowania rozszerzeń dostawców, wielu interfejsów HAL i wielu instancji interfejsów HAL w przypadku testów VTS uruchamianych na urządzeniu docelowym i na hoście.
Informacje o nazwach usług
Każda instancja działającej usługi HAL rejestruje się pod nazwą usługi.
W poprzednich wersjach Androida deweloperzy przeprowadzający testy VTS HAL musieli ustawić prawidłową nazwę usługi dla klienta testowego w getService()
lub pozostawić nazwę pustą i przywrócić domyślną nazwę usługi. Wady tego podejścia to:
- Poleganie na wiedzy dewelopera testu w zakresie ustawiania prawidłowej nazwy usługi.
- Domyślnie ograniczone do testowania pojedynczej instancji usługi.
- Ręczne utrzymywanie nazw usług (tzn. nazwy są zakodowane na stałe, więc w przypadku zmiany nazwy usługi trzeba je ręcznie zaktualizować).
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ę HAL camera.provider, która działa na urządzeniach dostawcy z niestandardową nazwą usługi, VTS może zidentyfikować instancję dostawcy i przeprowadzić na niej test.
- Wiele instancji HAL Jeśli na przykład
graphics.composer
HAL ma 2 instancje (jedną o nazwie usługi „default” i drugą o nazwie usługi „vr”), VTS może zidentyfikować obie instancje i przeprowadzić test na każdej z nich. - Testowanie wielu HAL-i Używane podczas testowania wielu interfejsów HAL z wieloma instancjami. Na przykład podczas uruchamiania testu VTS, który sprawdza, jak współpracują ze sobą interfejsy HAL KeyMint (wcześniej Keymaster) i Gatekeeper, VTS może przetestować wszystkie kombinacje instancji usług dla tych interfejsów HAL.
Testy po stronie miejsca docelowego
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:
- Zarejestruj w teście interfejsy HAL kierowania.
- Wyświetl wszystkie zarejestrowane warstwy HAL.
- Pobieranie nazw usług zarejestrowanych interfejsów HAL dostarczonych przez platformę VTS.
Dodatkowo platforma VTS zapewnia obsługę w czasie działania w przypadku:
- Wstępne przetwarzanie pliku binarnego testu w celu uzyskania wszystkich zarejestrowanych interfejsów HAL testu.
- Identyfikowanie wszystkich działających instancji usługi i pobieranie nazwy usługi dla każdej instancji (pobierane na podstawie
vendor/manifest.xml
). - Obliczanie wszystkich kombinacji instancji (aby obsługiwać testowanie wielu HAL).
- Generowanie nowego testu dla każdej instancji usługi (kombinacji).
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-e:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Użyj
getServiceName()
udostępnionego 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(); }
Więcej przykładów znajdziesz w sekcji VtsHalCameraProviderV2_4TargetTest.cpp
.
Testy VTS po stronie hosta
Testy VTS po stronie hosta uruchamiają skrypty testowe po stronie hosta zamiast plików binarnych testów na urządzeniu docelowym. Aby włączyć w tych testach rozpoznawanie nazwy usługi, możesz użyć szablonów po stronie hosta, aby uruchomić ten sam skrypt testowy wiele razy z różnymi parametrami (podobnie jak w przypadku testu parametryzowanego gtest).
- Skrypt hal test określa usługi HAL kierowania w teście.
hal_hidl_host_test
(podklasaparam_test
) pobiera zarejestrowane interfejsy HAL testów ze skryptu testowego, identyfikuje odpowiednie nazwy usług dla interfejsu HAL testów, a następnie generuje kombinacje nazw usług (na potrzeby testowania wielu interfejsów HAL) jako parametry testu. Zawiera 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ę, która umożliwia akceptowanie listy parametrów i przeprowadzanie wszystkich podanych przypadków testowych dla każdego parametru. Tzn. dla każdego przypadku testowego generuje N nowych sparametryzowanych przypadków testowych (N = rozmiar parametrów), z których każdy ma dany parametr.
Konfigurowanie testów po stronie hosta z uwzględnieniem nazwy usługi
Aby skonfigurować środowisko testowe do testowania z uwzględnieniem nazwy usługi po stronie hosta:
- W skrypcie testowym określ docelową usługę HAL:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Zadzwoń pod numer
getHalServiceName()
i przekaż 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 sekcji VtsHalMediaOmxStoreV1_0HostTest.py
.
Rejestrowanie testowych HAL-i
W poprzednich wersjach Androida VTS identyfikował testowany HAL za pomocą opcji <precondition-lshal>
skonfigurowanej w AndroidTest.xml
. To podejście było trudne do utrzymania (ponieważ wymagało od programistów prawidłowego skonfigurowania testu i odpowiedniego zaktualizowania konfiguracji) i niedokładne (ponieważ zawierało tylko informacje o pakiecie i wersji, a nie informacje o interfejsie).
W Androidzie 9 VTS identyfikuje testowany HAL za pomocą rozpoznawania nazwy usługi. Zarejestrowane interfejsy HAL testowania są też przydatne do:
- Sprawdzanie warunków wstępnych Przed uruchomieniem testu HAL VTS może sprawdzić, czy testowany HAL jest dostępny na urządzeniu docelowym, i pominąć testy, jeśli nie jest (patrz sprawdzanie możliwości testowania VTS).
- Pomiar zasięgu VTS obsługuje pomiar pokrycia kodu w różnych procesach dzięki wiedzy o usługach HAL testowanych przez siebie (tzn. o tym, że ma opróżnić pokrycie dla procesu usługi HAL).