Android 9 permet d'obtenir le nom de service d'une instance HAL donnée en fonction de l'appareil sur lequel les tests VTS (Vendor Test Suite) sont exécutés. L'exécution de tests VTS HAL qui tiennent compte des noms de service permet aux développeurs d'automatiser les extensions de fournisseur de test, plusieurs HAL et plusieurs instances HAL lors des exécutions de tests VTS côté cible et côté hôte.
À propos des noms de service
Chaque instance du service HAL en cours d'exécution s'enregistre avec un nom de service.
Dans les versions précédentes d'Android, les développeurs exécutant des tests VTS HAL devaient définir le nom de service approprié pour le client de test dans getService()
ou laisser le nom vide et revenir au nom de service par défaut. Cette approche présente les inconvénients suivants :
- Le développeur du test doit connaître le nom de service correct.
- Par défaut, les tests sont limités à une seule instance de service.
- La maintenance manuelle des noms de service (c'est-à-dire que les noms sont codés en dur et doivent être mis à jour manuellement s'ils changent)
Dans Android 9, les développeurs peuvent obtenir automatiquement le nom du service pour une instance HAL donnée en fonction de l'appareil testé. Cette approche présente les avantages suivants :
- Extensions HAL du fournisseur. Par exemple, lorsqu'un fournisseur dispose d'une implémentation de camera.provider HAL qui s'exécute sur des appareils du fournisseur avec un nom de service personnalisé, VTS peut identifier l'instance du fournisseur et exécuter le test sur celle-ci.
- Plusieurs instances HAL. Par exemple, lorsque le HAL
graphics.composer
comporte deux instances (l'une avec le nom de service "default" et l'autre avec le nom de service "vr"), VTS peut identifier les deux instances et exécuter le test sur chacune d'elles. - Tests multi-HAL. Utilisé lors du test de plusieurs HAL avec plusieurs instances. Par exemple, lors de l'exécution du test VTS qui vérifie le fonctionnement conjoint des HAL KeyMint (anciennement Keymaster) et Gatekeeper, VTS peut tester toutes les combinaisons d'instances de service pour ces HAL.
Tests côté cible
Pour activer la reconnaissance du nom de service pour les tests côté cible, Android 9 inclut un environnement de test personnalisable (VtsHalHidlTargetTestEnvBase
) qui fournit des interfaces pour :
- Enregistrez les HAL de ciblage dans le test.
- Listez tous les HAL enregistrés.
- Obtenez le ou les noms de service pour les HAL enregistrés fournis par le framework VTS.
De plus, le framework VTS fournit une assistance d'exécution pour :
- Prétraitez le binaire de test pour obtenir tous les HAL de test enregistrés.
- Identifier toutes les instances de service en cours d'exécution et obtenir le nom de service pour chaque instance (récupéré en fonction de
vendor/manifest.xml
). - Calcul de toutes les combinaisons d'instances (pour prendre en charge les tests HAL multiples).
- Générez un test pour chaque instance de service (combinaison).
Exemple :
Configurer des tests côté cible compatibles avec les noms de service
Pour configurer votre environnement de test pour les tests avec reconnaissance du nom de service côté cible :
- Définissez un
testEnvironment
basé surVtsHalHidlTargetTestEnvBase
et enregistrez les HAL de test :#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Utilisez
getServiceName()
fourni par l'environnement de test pour transmettre le nom du service :::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Enregistrez l'environnement de test dans
main()
etinitTest
:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
Pour obtenir des exemples supplémentaires, consultez VtsHalCameraProviderV2_4TargetTest.cpp
.
Tests VTS côté hôte
Les tests VTS côté hôte exécutent des scripts de test côté hôte au lieu de binaires de test sur l'appareil cible. Pour activer la reconnaissance du nom de service pour ces tests, vous pouvez utiliser des modèles côté hôte pour exécuter le même script de test plusieurs fois avec différents paramètres (comme le test paramétré gtest).
- Le script hal test spécifie le ou les services HAL cibles dans le test.
hal_hidl_host_test
(sous-classe deparam_test
) prend les HAL de test enregistrés à partir du script de test, identifie les noms de service correspondants pour le HAL de test, puis génère des combinaisons de noms de service (pour les tests multi-HAL) en tant que paramètres de test. Il fournit également une méthodegetHalServiceName()
qui renvoie le nom de service correspondant en fonction du paramètre transmis au cas de test actuel.- Le modèle param_test est compatible avec la logique permettant d'accepter une liste de paramètres et d'exécuter tous les cas de test donnés pour chaque paramètre. Autrement dit, pour chaque cas de test, il génère N nouveaux cas de test paramétrés (N = taille des paramètres), chacun avec un paramètre donné.
Configurer des tests côté hôte tenant compte du nom du service
Pour configurer votre environnement de test pour les tests prenant en compte le nom du service côté hôte :
- Spécifiez le service HAL cible dans le script de test :
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Appelez
getHalServiceName()
et transmettez le nom à 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))
Pour obtenir des exemples supplémentaires, consultez VtsHalMediaOmxStoreV1_0HostTest.py
.
Enregistrer les HAL de test
Dans les versions précédentes d'Android, VTS identifiait le HAL de test à l'aide de l'option <precondition-lshal>
configurée dans AndroidTest.xml
. Cette approche était difficile à maintenir (car elle reposait sur les développeurs pour configurer correctement le test et mettre à jour la configuration en conséquence) et inexacte (car elle ne contenait que les informations sur le package et la version, et non celles sur l'interface).
Dans Android 9, VTS identifie le HAL de test à l'aide de la reconnaissance du nom de service. Les HAL de test enregistrés sont également utiles pour :
- Vérifications des conditions préalables. Avant d'exécuter un test HAL, VTS peut confirmer que le HAL de test est disponible sur l'appareil cible et ignorer les tests s'il ne l'est pas (voir Vérification de la testabilité VTS).
- Mesure de la couverture : VTS est compatible avec la mesure de la couverture du code interprocessus grâce à la connaissance des services HAL de test qu'il souhaite mesurer (c'est-à-dire pour vider la couverture du processus de service HAL).