Testowanie HAL rozpoznające nazwę usługi

Android 9 zapewnia możliwość uzyskania dostępu do usługi nazwa danej instancji HAL na podstawie urządzenia, na którym Vendor Test Suite Trwają testy VTS. Przeprowadzam testy HAL VTS, które rozpoznają nazwę usługi pozwala programistom na automatyzację testowania rozszerzeń dostawców, wielu HAL oraz wiele instancji HAL podczas testów VTS po stronie miejsca docelowego i hosta.

Informacje o nazwach usług

Każda instancja uruchomionej usługi HAL rejestruje się przy użyciu nazwy usługi.

W poprzednich wersjach Androida deweloperzy przeprowadzający testy VTS HAL byli wymagane do ustawienia prawidłowej nazwy usługi dla klienta testowego w getService() lub pozostaw nazwę pustą i użyj wartości domyślnej nazwa usługi. Wady tego podejścia obejmują:

  • Wybór odpowiedniej usługi polegał na wiedzy programisty testu imię i nazwisko.
  • Domyślnie ograniczone do testowania w jednej instancji usługi.
  • ręczną konserwację nazw usług (np. gdy nazwy są zakodowane na stałe, jeśli nazwa usługi się zmieni, trzeba będzie zaktualizować ją ręcznie.

W Androidzie 9 deweloperzy mogą automatycznie pobierać nazwa usługi dla danej instancji HAL określona na podstawie testowanego urządzenia. Zalety tej metody obejmują możliwość testowania:

  • Rozszerzenia HAL dostawców. Jeśli na przykład dostawca ma wdrożenie interfejsu HAL Camera.provider, który działa na urządzeniach dostawców z dostosowana nazwa usługi, VTS może zidentyfikować instancję dostawcy i uruchomić test i ochrony danych.
  • Wiele instancji HAL. Na przykład, gdy tag HAL graphics.composer ma 2 instancje (jedną z nazwą usługi) „domyślna” i jednej o nazwie usługi „vr”), VTS może identyfikować zarówno instancje, przeprowadź test na każdej z nich.
  • Testowanie wielu HAL. Używany podczas testowania wielu HAL z użyciem w wielu instancjach, np. przy uruchamianiu testu VTS, który sprawdza, klucz HAL i sterownik HAL współpracują ze sobą, VTS może testować wszystkie kombinacje instancji usług dla tych HAL.

Testy po stronie docelowej

Aby włączyć świadomość nazwy usługi na potrzeby testów po stronie docelowej, Android 9 obejmuje środowisko testowe z możliwością dostosowania. (VtsHalHidlTargetTestEnvBase) który udostępnia interfejsy do:

  • Zarejestruj HAL kierowania w teście.
  • Wymień wszystkie zarejestrowane HAL.
  • Pobieranie nazw usług dla zarejestrowanych HAL udostępnianych przez platformę VTS.

Platforma VTS zapewnia też obsługę tych obszarów w czasie działania:

  • Wstępne przetwarzanie testowego pliku binarnego w celu pobrania wszystkich zarejestrowanych wartości HAL testowych.
  • Identyfikowanie wszystkich działających instancji usługi i pobieranie nazwy usługi dla każdej instancji (pobrane na podstawie parametru vendor/manifest.xml).
  • Obliczam wszystkie kombinacje instancji (na potrzeby obsługi wielu HAL testowanie).
  • Generowanie nowego testu dla każdej instancji usługi (kombinacji).

Przykład:

Obsługa środowiska wykonawczego na potrzeby testów po stronie docelowej

Rysunek 1. Obsługa środowiska wykonawczego platformy VTS na potrzeby testowania po stronie docelowej
.

Konfigurowanie testów po stronie docelowej z uwzględnieniem nazw usług

Aby skonfigurować środowisko testowe na potrzeby testowania nazw usług po stronie docelowej:

  1. Zdefiniuj testEnvironment na podstawie VtsHalHidlTargetTestEnvBase i zarejestruj testowe wartości HAL:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Aby zdać, użyj pakietu getServiceName() udostępnionego przez środowisko testowe nazwa usługi:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Zarejestruj środowisko testowe w systemie main() i initTest:
    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 włączyć świadomość nazwy usługi w tych testach, możesz: użyj szablonów po stronie hosta, aby wielokrotnie uruchamiać ten sam skrypt testowy różne parametry (podobne do testu z parametrami gtest).

Obsługa środowiska wykonawczego na potrzeby testowania po stronie hosta

Rysunek 2. Obsługa środowiska wykonawczego platformy VTS po stronie hosta testowanie
.
  • Skrypt hal test określa wartość HAL kierowania. usług objętych testem.
  • hal_hidl_host_test (podklasa param_test) pobiera zarejestrowane HAL do testów z skrypt testowy, identyfikuje odpowiednie nazwy usług dla testowej wersji HAL, a następnie generuje kombinacje nazw usług (na potrzeby testowania wielu HAL) w ramach testu . Udostępnia też metodę getHalServiceName(), która zwraca odpowiednią nazwę usługi zgodnie z parametrem przekazanym do do bieżącego przypadku testowego.
  • param_test pozwala na akceptowanie listy parametrów i uruchamianie w przypadku poszczególnych parametrów. Na przykład dla każdego przypadku testowego generuje N nowych z parametrami przypadku testowego (N = rozmiar parametrów), każdy z określonym .

Konfigurowanie testów po stronie hosta z uwzględnieniem nazwy usługi

Aby skonfigurować środowisko testowe pod kątem testowania nazw usług po stronie hosta:

  1. Określ docelową usługę HAL w skrypcie testowym:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. 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))
    

Dodatkowe przykłady znajdziesz tutaj: VtsHalMediaOmxStoreV1_0HostTest.py

Rejestrowanie testowych HAL

W poprzednich wersjach Androida narzędzie VTS określało testową HAL na podstawie <precondition-lshal> opcja skonfigurowana w AndroidTest.xml Takie podejście było trudne w obsłudze (ponieważ poprawnie skonfigurować test i zaktualizować konfiguracji) i niedokładną (ponieważ zawierała tylko pakiet i wersji, a nie interfejsu).

W Androidzie 9 VTS identyfikuje test HAL za pomocą świadomości nazwy usługi. Zarejestrowane wartości HAL testów są też przydatne w przypadku:

  • Kontrole warunków wstępnych. Przed przeprowadzeniem testu HAL usługa VTS może Sprawdź, czy test HAL jest dostępny na urządzeniu docelowym i pomiń testy jeśli nie jest (patrz VTS) sprawdzenie możliwości testowania).
  • Pomiar pokrycia. VTS obsługuje kod międzyprocesowy pomiar pokrycia przez wiedzę na temat testowania usług HAL, których chce używać do pomiaru (tzn. usuwania pokrycia w ramach procesu obsługi hal).