Android 9 bietet Unterstützung für das Abrufen des Dienstnamens einer bestimmten HAL-Instanz basierend auf dem Gerät, auf dem Vendor Test Suite (VTS)-Tests ausgeführt werden. Durch die Ausführung von VTS-HAL-Tests, die Dienstnamen berücksichtigen, können Entwickler das Testen von Anbietererweiterungen, mehreren HALs und mehreren HAL-Instanzen sowohl bei ziel- als auch hostseitigen VTS-Testläufen automatisieren.
Über Dienstnamen
Jede Instanz des laufenden HAL-Dienstes registriert sich selbst mit einem Dienstnamen.
In früheren Android-Versionen mussten Entwickler, die VTS-HAL-Tests ausführen, in getService()
den korrekten Dienstnamen für den Testclient festlegen oder den Namen leer lassen und auf den Standarddienstnamen zurückgreifen. Zu den Nachteilen dieses Ansatzes gehörten:
- Verlassen Sie sich auf das Wissen des Testentwicklers, um den richtigen Dienstnamen festzulegen.
- Standardmäßig auf das Testen einer einzelnen Dienstinstanz beschränkt.
- Manuelle Pflege von Dienstnamen (d. h. da Namen fest codiert sind, müssen sie manuell aktualisiert werden, wenn sich der Dienstname ändert.
In Android 9 können Entwickler automatisch den Dienstnamen für eine bestimmte HAL-Instanz basierend auf dem zu testenden Gerät abrufen. Zu den Vorteilen dieses Ansatzes gehört die Unterstützung beim Testen:
- HAL-Erweiterungen des Anbieters . 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 dafür ausführen.
- Mehrere HAL-Instanzen . Wenn die
graphics.composer
HAL beispielsweise über zwei Instanzen verfügt (eine mit dem Dienstnamen „default“ und eine mit dem Dienstnamen „vr“), kann VTS beide Instanzen identifizieren und den Test für jede von ihnen ausführen. - Multi-HAL-Tests . Wird beim Testen mehrerer HALs mit mehreren Instanzen verwendet. Wenn Sie beispielsweise den VTS-Test ausführen, der überprüft, wie die Keymaster- und Gatekeeper-HAL zusammenarbeiten, kann VTS alle Kombinationen von Dienstinstanzen für diese HALs testen.
Zielseitige Tests
Um die Erkennung von Dienstnamen für zielseitige Tests zu ermöglichen, enthält Android 9 eine anpassbare Testumgebung ( VtsHalHidlTargetTestEnvBase
), die Schnittstellen bereitstellt für:
- Registrieren Sie Targeting-HAL(s) im Test.
- Listen Sie alle registrierten HAL(s) auf.
- Rufen Sie 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 laufenden Dienstinstanzen und Abrufen des Dienstnamens für jede Instanz (abgerufen basierend auf
vendor/manifest.xml
). - Berechnung aller Instanzkombinationen (zur Unterstützung mehrerer HAL-Tests).
- Generieren eines neuen Tests für jede Dienstinstanz (Kombination).
Beispiel:
Richten Sie zielseitige Tests mit Erkennung des Dienstnamens ein
So richten Sie Ihre Testumgebung für zielseitige Dienstnamenerkennungstests ein:
- Definieren Sie eine
testEnvironment
basierend aufVtsHalHidlTargetTestEnvBase
und registrieren Sie Test-HALs:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Verwenden Sie
getServiceName()
, das von der Testumgebung bereitgestellt wird, um den Dienstnamen::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
zu übergeben - Registrieren Sie die Testumgebung in
main()
undinitTest
: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
Hostseitige VTS-Tests führen Testskripte auf der Hostseite anstelle von Testbinärdateien auf dem Zielgerät aus. Um die Erkennung von Dienstnamen für diese Tests zu ermöglichen, können Sie hostseitige Vorlagen verwenden, um dasselbe Testskript mehrmals mit unterschiedlichen Parametern auszuführen (ähnlich dem parametrisierten gtest-Test).
- Das Hal- Testskript gibt die Ziel-HAL-Dienste im Test an.
- Der
hal_hidl_host_test
(Unterklasse vonparam_test
) übernimmt die registrierten Test-HALs aus dem Testskript, identifiziert den/die entsprechenden Dienstnamen für den Test-HAL und generiert dann Dienstnamenkombinationen (für Multi-HAL-Tests) als Testparameter. Es stellt außerdem eine MethodegetHalServiceName()
bereit, die den entsprechenden Dienstnamen entsprechend dem an den aktuellen Testfall übergebenen Parameter zurückgibt. - Die param_test- Vorlage unterstützt die Logik zum Akzeptieren einer Liste von Parametern und zum Ausführen aller angegebenen Testfälle für jeden Parameter. Dh für jeden Testfall werden N neue parametrisierte Testfälle (N = Größe der Parameter) mit jeweils einem bestimmten Parameter generiert.
Richten Sie hostseitige Tests mit Berücksichtigung des Dienstnamens ein
So richten Sie Ihre Testumgebung für hostseitige Dienstnamenerkennungstests ein:
- Geben Sie den Ziel-HAL-Dienst im Testskript an:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Rufen Sie
getHalServiceName()
auf und übergeben Sie den Namen an 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
.
Registrieren Sie Test-HALs
In früheren Android-Versionen identifizierte VTS den Test-HAL mithilfe der in AndroidTest.xml
konfigurierten Option <precondition-lshal>
. Dieser Ansatz war schwierig beizubehalten (da er darauf angewiesen war, dass die Entwickler den Test richtig konfigurierten und die Konfiguration entsprechend aktualisierten) und ungenau (da er nur die Paket- und Versionsinformationen und nicht die Schnittstelleninformationen enthielt).
In Android 9 identifiziert VTS den Test-HAL mithilfe der Dienstnamenerkennung. Die registrierten Test-HALs sind auch nützlich für:
- Vorbedingungsprüfungen . Bevor ein HAL-Test ausgeführt wird, kann VTS bestätigen, dass das Test-HAL auf dem Zielgerät verfügbar ist, und die Tests überspringen, wenn dies nicht der Fall ist (siehe VTS-Testbarkeitsprüfung ).
- Abdeckungsmessung . VTS unterstützt die Messung der prozessübergreifenden Codeabdeckung durch das Wissen über die Test-HAL-Dienste, die es messen möchte (z. B. um die Abdeckung für den Hal-Dienstprozess zu löschen).