Android 9 unterstützt das Abrufen des Dienstnamens einer bestimmten HAL-Instanz basierend auf dem Gerät, auf dem VTS-Tests (Vendor Test Suite) ausgeführt werden. Durch die Ausführung von VTS-HAL-Tests, die den Dienstnamen berücksichtigen, können Entwickler die Tests von Anbietererweiterungen, mehreren HALs und mehreren HAL-Instanzen sowohl auf Ziel- als auch auf Hostseite automatisieren.
Dienstnamen
Jede Instanz des laufenden HAL-Dienstes registriert sich mit einem Dienstnamen.
In früheren Android-Versionen mussten Entwickler, die VTS HAL-Tests ausführen, den korrekten Dienstnamen für den Testclient in getService()
festlegen oder den Namen leer lassen und auf den Standarddienstnamen zurückgreifen. Zu den Nachteilen dieses Ansatzes gehörten:
- Der Testentwickler muss den richtigen Dienstnamen festlegen.
- Standardmäßig auf Tests mit einer einzelnen Dienstinstanz beschränkt.
- Manuelle Pflege von Dienstnamen (d.h., da die Namen hartcodiert sind, müssen sie manuell aktualisiert werden, wenn sich der Dienstname ändert.
Unter Android 9 können Entwickler den Dienstnamen für eine bestimmte HAL-Instanz automatisch basierend auf dem getesteten Gerät abrufen. Zu den Vorteilen dieses Ansatzes gehört die Unterstützung für Tests:
- HAL-Erweiterungen von Anbietern Wenn ein Anbieter beispielsweise eine Implementierung der HAL „camera.provider“ hat, die auf Geräten des Anbieters mit einem benutzerdefinierten Dienstnamen ausgeführt wird, kann VTS die Anbieterinstanz identifizieren und den Test darauf ausführen.
- Mehrere HAL-Instanzen Wenn die
graphics.composer
HAL beispielsweise zwei Instanzen hat (eine mit dem Dienstnamen „default“ und eine mit dem Dienstnamen „vr“), kann VTS beide Instanzen erkennen und den Test für jede davon ausführen. - Multi-HAL-Tests Wird beim Testen mehrerer HALs mit mehreren Instanzen verwendet. Wenn Sie beispielsweise den VTS-Test ausführen, der die Zusammenarbeit der Keymaster- und Gatekeeper-HAL prüft, kann VTS alle Kombinationen von Dienstinstanzen für diese HALs testen.
Zielseitentests
Um die Dienstnamenerkennung für zielseitige Tests zu ermöglichen, enthält Android 9 eine anpassbare Testumgebung (VtsHalHidlTargetTestEnvBase
), die Schnittstellen für Folgendes bietet:
- Registrieren Sie die Ausrichtung auf HALs im Test.
- Listet alle registrierten HALs auf.
- Dienstnamen für registrierte HALs abrufen, die vom VTS-Framework bereitgestellt werden.
Darüber hinaus bietet das VTS-Framework Laufzeitunterstützung für:
- Vorverarbeitung des Test-Binärcodes, um alle registrierten Test-HALs zu erhalten.
- Alle laufenden Dienstinstanzen identifizieren und den Dienstnamen für jede Instanz abrufen (anhand von
vendor/manifest.xml
abgerufen). - Alle Instanzkombinationen berechnen (um mehrere HAL-Tests zu unterstützen)
- Für jede Dienstinstanz (Kombination) wird ein neuer Test generiert.
Beispiel:
Zielseitige Tests einrichten, die den Dienstnamen berücksichtigen
So richten Sie Ihre Testumgebung für standortbezogene Tests ein, die den Dienstnamen berücksichtigen:
- 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()
aus der Testumgebung, um den Dienstnamen zu übergeben:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- 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 findest du unter VtsHalCameraProviderV2_4TargetTest.cpp
.
Hostseitige VTS-Tests
Bei hostseitigen VTS-Tests werden Testscripts auf der Hostseite ausgeführt, anstelle von Testbinärdateien auf dem Zielgerät. Wenn Sie die Dienstnamenerkennung für diese Tests aktivieren möchten, können Sie hostseitige Vorlagen verwenden, um dasselbe Testscript mehrmals mit verschiedenen Parametern auszuführen (ähnlich wie beim parametrisierten gtest-Test).
- Im Script hal test werden die HAL-Dienste für die Ausrichtung im Test angegeben.
- Die
hal_hidl_host_test
(Unterklasse vonparam_test
) übernimmt die registrierten Test-HALs aus dem Testscript, identifiziert die entsprechenden Dienstnamen für die Test-HAL und generiert dann Dienstnamenkombinationen (für Mehrfach-HAL-Tests) als Testparameter. Außerdem gibt es die MethodegetHalServiceName()
, die den entsprechenden Dienstnamen entsprechend dem Parameter zurückgibt, der an den aktuellen Testfall übergeben wurde. - Die Vorlage param_test unterstützt eine Logik, mit der eine Liste von Parametern akzeptiert und alle angegebenen Testfälle für jeden Parameter ausgeführt werden. Das bedeutet, dass für jeden Testfall N neue parametrisierte Testfälle generiert werden (N = Größe der Parameter), die jeweils einen bestimmten Parameter haben.
Dienstnamen-sensitive hostseitige Tests einrichten
So richten Sie Ihre Testumgebung für hostseitige Tests mit Dienstnamen ein:
- Geben Sie den Ziel-HAL-Dienst im Testscript 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 findest du unter VtsHalMediaOmxStoreV1_0HostTest.py
.
Test-HALs registrieren
In früheren Android-Versionen identifizierte VTS die Test-HAL anhand der Option <precondition-lshal>
, die in AndroidTest.xml
konfiguriert wurde. Dieser Ansatz war schwer zu pflegen, da die Entwickler den Test richtig konfigurieren und die Konfiguration entsprechend aktualisieren mussten. Außerdem war er ungenau, da er nur die Paket- und Versionsinformationen und nicht die Informationen zur Benutzeroberfläche enthielt.
In Android 9 identifiziert VTS die Test-HAL anhand des Dienstnamens. Die registrierten HALs für Tests eignen sich auch für Folgendes:
- Voraussetzungsprüfungen: Vor dem Ausführen eines HAL-Tests kann VTS prüfen, ob die Test-HAL auf dem Zielgerät verfügbar ist, und die Tests überspringen, falls dies nicht der Fall ist (siehe VTS-Testbarkeitsprüfung).
- Abdeckungsmessung VTS unterstützt die prozessübergreifende Codeabdeckungsmessung anhand der Informationen zu den zu messenden HAL-Diensten für die Tests (d.h. die Abdeckung für den HAL-Dienstprozess löschen).