Tests HAL de reconnaissance du nom de service

Android 9 permet d'obtenir le service nom d'une instance HAL donnée en fonction de l'appareil sur lequel Vendor Test Suite (VTS) sont en cours d'exécution. 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 :

  • S'appuyer sur les connaissances du développeur de tests pour définir le bon service son nom.
  • Par défaut, limité aux tests sur une seule instance de service.
  • Maintenance manuelle des noms de service (car les noms sont codés en dur, vous devez les mettre à jour manuellement si le nom du service change.

Avec Android 9, les développeurs peuvent obtenir automatiquement nom de service d'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 du fournisseur Par exemple, lorsqu'un fournisseur a de la couche d'abstraction du matériel "camera.provider" qui s'exécute sur les appareils du fournisseur avec une nom de service personnalisé, VTS peut identifier l'instance du fournisseur et exécuter le test s'y opposent.
  • 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 multiHAL : Utilisé lors du test de plusieurs HAL avec plusieurs instances. Par exemple, lors de l'exécution du test VTS pour vérifier le HAL (keymaster et gatekeeper) fonctionne en synergie, le 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étraitement du binaire de test pour obtenir tous les HAL de test enregistrés.
  • Identification de toutes les instances de service en cours d'exécution et récupération du nom du service pour chaque instance (récupéré en fonction de vendor/manifest.xml).
  • Calcul de toutes les combinaisons d'instances (pour prendre en charge plusieurs HAL) tests).
  • Générer un test pour chaque instance de service (combinaison)

Exemple :

Compatibilité de l'environnement d'exécution pour les tests côté cible

Figure 1. Compatibilité avec l'environnement d'exécution du framework VTS pour les tests côté cible

Configurer des tests côté cible tenant compte du nom de service

Pour configurer votre environnement de test pour les tests respectueux du nom de service côté cible :

  1. Définir une testEnvironment basée sur VtsHalHidlTargetTestEnvBase et enregistrez des HAL de test:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. 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.
  3. Enregistrez l'environnement de test dans main() et 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();
    }

Pour obtenir d'autres exemples, consultez VtsHalCameraProviderV2_4TargetTest.cpp

Tests côté hôte de la VTS

Les tests VTS côté hôte exécutent des scripts de test côté hôte au lieu des 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).

Compatibilité de l&#39;environnement d&#39;exécution pour les tests côté hôte

Figure 2. Prise en charge de l'environnement d'exécution du framework VTS pour les tests côté hôte
  • Le script de test HAL spécifie le ciblage HAL. service(s) concerné(s).
  • hal_hidl_host_test (sous-classe de param_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éthode getHalServiceName() qui renvoie le nom de service correspondant en fonction du paramètre transmis à le scénario de test actuel.
  • La param_test est compatible avec une logique permettant d'accepter une liste de paramètres et d'exécuter tous les paramètres des scénarios de test par rapport à 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 afin d'effectuer des tests de reconnaissance du nom de service côté hôte:

  1. Spécifiez le service HAL cible dans le script de test:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
  2. 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 d'autres exemples, 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 du 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 test HAL à l'aide de la détection du nom des services. Les HAL de test enregistrées sont également utiles pour:

  • Vérifications des conditions préalables Avant d'exécuter un test HAL, le VTS peut Vérifier que le HAL de test est disponible sur l'appareil cible et ignorer les tests Si ce n'est pas le cas (reportez-vous à VTS contrôle de testabilité).
  • Mesure de la couverture VTS prend en charge le code multiprocessus mesure de la couverture grâce à la connaissance des services de test HAL souhaités à mesurer (pour vider la couverture pour le processus de service hal).