Android 9 permet d'obtenir le nom du 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 HAL VTS compatibles avec le nom de service permet aux développeurs d'automatiser les tests des extensions du fournisseur, de plusieurs HAL et de plusieurs instances HAL à la fois 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 HAL VTS devaient définir le nom de service correct pour le client de test dans getService()
ou laisser le nom vide et utiliser le nom de service par défaut. Les inconvénients de cette approche sont les suivants:
- Recours aux connaissances du développeur de test pour définir le nom de service correct.
- Limité aux tests sur une seule instance de service par défaut.
- Maintenance manuelle des noms de service (c'est-à-dire que, comme les noms sont codés en dur, ils doivent être mis à jour manuellement si le nom du service change).
Sous Android 9, les développeurs peuvent obtenir automatiquement le nom du service pour une instance HAL donnée en fonction de l'appareil testé. Les avantages de cette approche incluent la prise en charge des tests:
- Extensions HAL des fournisseurs. Par exemple, lorsqu'un fournisseur dispose d'une implémentation de l'HAL camera.provider qui s'exécute sur les appareils du fournisseur avec un nom de service personnalisé, VTS peut identifier l'instance du fournisseur et exécuter le test à son encontre.
- Plusieurs cas d'utilisation HAL Par exemple, lorsque le HAL
graphics.composer
comporte deux instances (une avec le nom de service "default" et l'autre avec le nom de service "vr"), le VTS peut identifier les deux instances et exécuter le test sur chacune d'elles. - Tests multiHAL : Utilisé lors du test de plusieurs HAL avec plusieurs instances. Par exemple, lorsque vous exécutez le test VTS qui vérifie le fonctionnement des HAL keymaster et gatekeeper, VTS peut tester toutes les combinaisons d'instances de service pour ces HAL.
Tests côté cible
Pour activer la détection des noms 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.
- Répertoriez 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 est compatible avec les éléments suivants au moment de l'exécution:
- Prétraiter 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 du service pour chaque instance (récupéré à partir de
vendor/manifest.xml
). - Calcul de toutes les combinaisons d'instances (pour prendre en charge plusieurs tests HAL).
- Générer un nouveau test pour chaque instance de service (combinaison).
Exemple :
Configurer des tests côté cible tenant compte du nom du service
Pour configurer votre environnement de test pour les tests respectueux du nom de service côté cible:
- Définissez un
testEnvironment
basé surVtsHalHidlTargetTestEnvBase
et enregistrez des 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 d'autres exemples, consultez VtsHalCameraProviderV2_4TargetTest.cpp
.
Tests côté hôte de la VTS
Les tests côté hôte VTS exécutent des scripts de test côté hôte au lieu de binaires de test sur l'appareil cible. Pour activer la prise en compte 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 de test hal spécifie le ou les services HAL de ciblage inclus dans le test.
hal_hidl_host_test
(sous-classe deparam_test
) récupère les HAL de test enregistrés à partir du script de test, identifie le ou 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 en cours.- Le modèle param_test accepte une 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 scénario de test, il génère N nouveaux scénarios 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 de prise en compte du nom de 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 des 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 à gérer (car elle dépendait des 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 les informations sur l'interface).
Dans Android 9, VTS identifie le HAL de test à l'aide de la prise en compte du nom de service. Les HAL de test enregistrés sont également utiles pour:
- Vérifications de condition préalable. 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 la section Vérification de la testabilité VTS).
- Mesure de la couverture VTS prend en charge la mesure de la couverture du code entre les processus via les connaissances sur les services HAL de test qu'il souhaite mesurer (c'est-à-dire pour effacer la couverture du processus de service HAL).