HAL-Test mit Erkennung des Dienstnamens

Android 9 umfasst Support für die Inanspruchnahme des Dienstes Name einer bestimmten HAL-Instanz, basierend auf dem Gerät, auf dem die Vendor Test Suite installiert ist (VTS)-Tests werden ausgeführt. VTS HAL-Tests ausführen, die den Dienstnamen berücksichtigen ermöglicht es Entwicklern, das Testen von Anbietererweiterungen, mehreren HALs und mehrere HAL-Instanzen in ziel- und hostseitigen VTS-Testläufen.

Dienstnamen

Jede Instanz des laufenden HAL-Dienstes registriert sich mit einem Dienstnamen.

In früheren Android-Versionen waren die Entwickler, die VTS HAL-Tests durchführten, muss der richtige Dienstname für den Testclient in getService() oder den Namen leer lassen und auf die Standardeinstellung zurücksetzen Dienstnamen. Dieser Ansatz hat unter anderem folgende Nachteile:

  • Sich auf das Wissen des Testentwicklers verlassen, um den richtigen Dienst einzurichten Namen.
  • Standardmäßig auf Tests für eine einzelne Dienstinstanz beschränkt.
  • Manuelle Verwaltung von Dienstnamen (da die Namen hartcodiert, müssen sie manuell aktualisiert werden, wenn sich der Dienstname ändert.

Unter Android 9 erhalten Entwickler automatisch Dienstname für eine bestimmte HAL-Instanz basierend auf dem zu testenden Gerät. Zu den Vorteilen dieses Ansatzes gehört die Unterstützung für Tests:

  • Anbieter-HAL-Erweiterungen. Wenn ein Zulieferunternehmen Implementierung von Camera.provider-HAL, die auf Anbietergeräten mit einer einen benutzerdefinierten Dienstnamen verwenden, kann VTS die Anbieterinstanz identifizieren und den Test dagegen verstoßen.
  • Mehrere HAL-Instanzen: Wenn zum Beispiel der Parameter graphics.composer HAL hat zwei Instanzen (eine mit Dienstname) „Standard“ und eine mit dem Dienstnamen „vr“, kann VTS sowohl Instanzen jeweils einen Test durchführen.
  • Multi-HAL-Tests. Wird beim Testen mehrerer HALs mit Wenn Sie z. B. einen VTS-Test ausführen, der prüft, Schlüsselmaster und Gatekeeper HAL arbeiten zusammen, VTS kann alle Kombinationen testen von Dienstinstanzen für diese HALs.

Tests auf der Zielseite

Um Dienstnamen für zielseitige Tests zu aktivieren, 9 enthält eine anpassbare Testumgebung (VtsHalHidlTargetTestEnvBase) das Schnittstellen für Folgendes bietet:

  • Registrieren Sie die Targeting-HAL(s) im Test.
  • Listen Sie alle registrierten HAL(s) auf.
  • Rufen Sie die Dienstnamen für registrierte HALs ab, die vom VTS-Framework bereitgestellt werden.

Darüber hinaus bietet das VTS-Framework Laufzeitunterstützung für:

  • Vorverarbeitung der Testbinärdatei, um alle registrierten Test-HAL(s) zu erhalten.
  • Identifizieren aller ausgeführten Dienstinstanzen und Abrufen des Dienstnamens für jede Instanz (abgerufen anhand von vendor/manifest.xml).
  • Berechnung aller Instanzkombinationen (zur Unterstützung mehrerer HAL) Tests).
  • Neuen Test für jede Dienstinstanz (Kombination) generieren

Beispiel:

Laufzeitunterstützung für zielseitige Tests

<ph type="x-smartling-placeholder">
</ph> Abbildung 1: Unterstützung der VTS-Framework-Laufzeit für zielseitige Tests

Zielseitige Tests für Dienstnamen einrichten

So richten Sie Ihre Testumgebung für Tests zur Erkennung von Dienstnamen auf Zielseite ein:

  1. Definieren Sie einen testEnvironment basierend auf VtsHalHidlTargetTestEnvBase und registrieren Sie Test-HALs:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Verwenden Sie zum Bestehen der Prüfung die von der Testumgebung bereitgestellte getServiceName()-Datei Dienstname:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registrieren Sie die Testumgebung in main() und 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();
    }

Weitere Beispiele finden Sie unter VtsHalCameraProviderV2_4TargetTest.cpp

Hostseitige VTS-Tests

Bei Host-seitigen VTS-Tests werden Testskripts auf Host-Seite statt Test-Binärdateien auf auf das Zielgerät aus. Um die Bekanntheit des Dienstnamens für diese Tests zu aktivieren, können Sie Verwenden Sie Vorlagen auf Hostseite, um dasselbe Testskript mehrmals auszuführen. verschiedene Parameter (ähnlich dem parametrisierten gtest-Test).

Laufzeitunterstützung für hostseitige Tests

<ph type="x-smartling-placeholder">
</ph> Abbildung 2: Unterstützung der VTS-Framework-Laufzeit auf Hostseite Testen
<ph type="x-smartling-placeholder">
    </ph>
  • Das hal test-Skript gibt die Targeting-HAL an. Dienst(en) im Test.
  • Die hal_hidl_host_test (Unterklasse von param_test) bezieht die registrierten Test-HAL(s) von Testskript, identifiziert den bzw. die entsprechenden Dienstnamen für die Test-HAL, und generiert dann Kombinationen aus Dienstnamen (für Multi-HAL-Tests) als Test Parameter. Außerdem bietet sie die getHalServiceName()-Methode, gibt den entsprechenden Dienstnamen gemäß dem an den aktuellen Testfall.
  • Die param_test Vorlage unterstützt Logik, um eine Liste von Parametern zu akzeptieren und alle angegebenen Testläufe für jeden Parameter. Das heißt: werden für jeden Testlauf N neue parametrisierter Testfall (N = Größe der Parameter), jeder mit einem .

Dienstnamenserkennung auf Hostseite einrichten

So richten Sie Ihre Testumgebung für hostseitige Dienstnamen-Tests ein:

  1. Geben Sie den Ziel-HAL-Dienst im Testskript an:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Rufen Sie getHalServiceName() auf und übergeben Sie den Namen an die 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))
    

Weitere Beispiele finden Sie unter VtsHalMediaOmxStoreV1_0HostTest.py

Test-HALs registrieren

In früheren Android-Versionen identifizierte VTS die Test-HAL mithilfe der Option „<precondition-lshal>“ konfiguriert in AndroidTest.xml. Dieser Ansatz war schwierig zu pflegen, da er dass die Entwickler den Test ordnungsgemäß konfigurieren und Konfiguration entsprechend) und ungenau (da es nur das Paket und nicht die Informationen zur Benutzeroberfläche).

In Android 9 identifiziert VTS den Test-HAL mithilfe von Bewusstsein für den Dienstnamen. Die registrierten Test-HALs sind auch nützlich für:

  • Vorbedingungsprüfungen. Vor dem HAL-Test kann VTS Prüfen, ob der Test-HAL auf dem Zielgerät verfügbar ist, und die Tests überspringen Ist dies nicht der Fall (siehe VTS) Testbarkeitsprüfung).
  • Messung der Abdeckung: VTS unterstützt prozessübergreifenden Code Messung der Abdeckung anhand des Wissens über die gewünschten HAL-Testdienste zu messen (z.B. um die Abdeckung des Hal-Service-Prozesses zu verringern).