Service Name Aware HAL-Tests

Android 9 unterstützt das Abrufen des Dienstnamens einer bestimmten HAL-Instanz basierend auf dem Gerät, auf dem Tests der Vendor Test Suite (VTS) ausgeführt werden. Das Ausführen von VTS-HAL-Tests, die Dienstnamen berücksichtigen, ermöglicht es Entwicklern, das Testen von Anbietererweiterungen, mehreren HALs und mehreren HAL-Instanzen sowohl bei ziel- als auch hostseitigen VTS-Testläufen zu automatisieren.

Über Dienstnamen

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

In früheren Versionen von Android, laufen Entwickler VTS HAL Tests die richtigen Dienstnamen für das Test - Client in gesetzt waren erforderlich getService() oder lassen Sie den Namen leer und Rückfall auf die Standarddienstnamen. Nachteile dieses Ansatzes waren:

  • Verlassen Sie sich auf das Wissen des Testentwicklers, um den richtigen Dienstnamen festzulegen.
  • Beschränkt sich standardmäßig auf das Testen mit einer einzelnen Dienstinstanz.
  • Manuelle Pflege von Dienstnamen (dh weil Namen hartcodiert sind, müssen sie manuell aktualisiert werden, wenn sich der Dienstname ändert.

In Android 9 können Entwickler den Dienstnamen für eine bestimmte HAL-Instanz basierend auf dem getesteten Gerät automatisch abrufen. Zu den Vorteilen dieses Ansatzes gehört die Unterstützung beim Testen:

  • Der Anbieter HAL - Erweiterungen. Wenn ein Anbieter beispielsweise über eine Implementierung von camera.provider HAL verfügt, die auf Anbietergeräten mit einem benutzerdefinierten Dienstnamen ausgeführt wird, kann VTS die Anbieterinstanz identifizieren und den Test damit ausführen.
  • Mehrere HAL - Instanzen. Wenn zum Beispiel des graphics.composer HAL hat zwei Instanzen (eines mit Service - Namen „default“ und eine mit Service - Namen „vr“), VTS beid Instanzen identifizieren können und den Test gegen jeden von ihnen laufen.
  • Multi-HAL - Tests. Wird beim Testen mehrerer HALs mit mehreren Instanzen verwendet Wenn beispielsweise der VTS-Test ausgeführt wird, der überprüft, wie die Keymaster- und Gatekeeper-HAL zusammenarbeiten, kann VTS alle Kombinationen von Dienstinstanzen für diese HALs testen.

Zielseitige Tests

Um Servicenamen Bewusstsein für zielseitige Tests zu ermöglichen, Android 9 enthält eine anpassbare Testumgebung ( VtsHalHidlTargetTestEnvBase ) , die Schnittstellen zu bietet:

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

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

  • Vorverarbeiten der Test-Binärdatei, um alle registrierten Test-HAL(s) zu erhalten.
  • Identifizieren Sie alle laufenden Service - Instanzen und bekommen den Service - Namen für jede Instanz (abgerufen basierend auf vendor/manifest.xml ).
  • Berechnen aller Instanzkombinationen (um mehrere HAL-Tests zu unterstützen).
  • Generieren eines neuen Tests für jede Dienstinstanz (Kombination).

Beispiel:

Runtime support for target-side testing

Abbildung 1. VTS Rahmen Laufzeitunterstützung für zielseitige Test

Einrichten von zielseitigen Tests mit Erkennung von Dienstnamen

So richten Sie Ihre Testumgebung für zielseitige Tests mit Servicenamen ein:

  1. Definieren Sie eine testEnvironment basierend auf VtsHalHidlTargetTestEnvBase und registrieren Test HALs:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Verwendung getServiceName() von der Testumgebung bereitgestellt Dienstnamen zu übergeben:
    ::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 in VtsHalCameraProviderV2_4TargetTest.cpp .

VTS hostseitige Tests

Hostseitige VTS-Tests führen Testskripts auf der Hostseite aus, anstatt Testbinärdateien auf dem Zielgerät zu verwenden. Um die Dienstnamenerkennung für diese Tests zu aktivieren, können Sie hostseitige Vorlagen verwenden, um dasselbe Testskript mehrmals für verschiedene Parameter auszuführen (ähnlich dem parametrisierten gtest-Test).

Runtime support for host-side testing

Abbildung 2. VTS Rahmen Laufzeitunterstützung für hostseitigen Test
  • Die hal Testskript gibt an dem Targeting - HAL Service (s) im Test.
  • Die hal_hidl_host_test (Subklasse von param_test ) führt den registrierten HAL Prüfung (en) von Testskript, identifiziert die entsprechenden Service - Name (n) für die Prüfung HAL, erzeugt dann Dienstnamen Kombinationen (für Multi-HAL - Tests) als Prüfparameter. Es stellt auch ein Verfahren getHalServiceName() , die die entsprechenden Dienstnamen zurückzugibt gemäß dem Parameter des aktuellen Testfall übergeben.
  • Die param_test Vorlage unterstützt Logik , um eine Liste der Parameter zu akzeptieren und alle gegebenen Testfälle gegen jeden Parameter ausgeführt werden . Dh für jeden Testfall erzeugt er N neue parametrisierte Testfälle (N = Parametergröße) mit jeweils einem gegebenen Parameter.

Einrichten von hostseitigen Tests mit Erkennung von Dienstnamen

So richten Sie Ihre Testumgebung für hostseitige Tests mit Servicenamen ein:

  1. Geben Sie das Ziel HAL Service im Testskript:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Call getHalServiceName() und übergeben Sie den Namen zu 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 in VtsHalMediaOmxStoreV1_0HostTest.py .

Registrieren von Test-HALs

In früheren Versionen von Android, identifiziert VTS die Prüfung HAL die Verwendung von <precondition-lshal> Option in konfiguriert AndroidTest.xml . Dieser Ansatz war schwierig zu pflegen (da er von Entwicklern abhängig war, um den Test richtig zu konfigurieren und die Konfiguration entsprechend zu aktualisieren) und ungenau (da er nur die Paket- und Versionsinformationen und nicht die Schnittstelleninformationen enthielt).

In Android 9 identifiziert VTS die Test-HAL mithilfe der Dienstnamenerkennung. Die registrierten Test-HALs sind auch nützlich für:

  • Voraussetzung überprüft. Bevor ein HAL - Test ausgeführt wird , können VTS bestätigen die Prüfung HAL auf dem Zielgerät vorhanden ist und die Tests überspringen , wenn es nicht (siehe ist VTS Testbarkeit Check ).
  • Versorgungs - Mess. VTS unterstützt die prozessübergreifende Code-Coverage-Messung durch das Wissen über die zu messenden HAL-Testdienste (dh um die Abdeckung für den Hal-Service-Prozess zu spülen).