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. Exécuter des tests HAL VTS tenant compte du nom du service permet aux développeurs d'automatiser le test des extensions de fournisseurs, de plusieurs HAL plusieurs instances HAL lors des exécutions de test 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 étaient de définir le nom de service correct pour le client de test dans getService(), ou laisser le nom vide et utiliser le nom par défaut nom du service. Cette approche a notamment les inconvénients suivants:

  • S'appuyer sur les connaissances du développeur de tests pour définir le bon service son nom.
  • Limité aux tests sur une seule instance de service par défaut.
  • 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 des fournisseurs. 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 graphics.composer HAL comporte deux instances (l'une avec un nom de service) "par défaut" et un autre portant le nom de service "vr"), le VTS peut identifier à la fois les instances exécuter le test sur chacun d'entre eux.
  • Tests multi-HAL. 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 le ou les HAL de ciblage dans le test.
  • Répertoriez toutes les HAL enregistrées.
  • Permet d'obtenir les noms de service des HAL enregistrés fournis par le framework VTS.

En outre, le framework VTS est compatible avec l'environnement d'exécution pour:

  • 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ée à partir 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é de 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 effectuer des tests tenant compte du nom des services 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 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 VTS côté hôte

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 détection des noms 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 sur paramètres différents (similaires au test paramétré gtest).

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

Figure 2. Compatibilité de l'environnement d'exécution du framework VTS côté hôte test
  • Le script de test HAL spécifie le ciblage HAL. service(s) concerné(s).
  • La hal_hidl_host_test (sous-classe de param_test) récupère le ou les HAL de test enregistrés de script de test, identifie le ou les noms de service correspondants pour le HAL de test, génère ensuite des combinaisons de noms de service (pour les tests multi-HAL) paramètres. 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. Par exemple, pour chaque scénario, il génère N nouvelles scénario de test paramétré (N = taille des paramètres), chacun avec une valeur .

Configurer des tests tenant compte des noms de service côté hôte

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 à maintenir compte sur les développeurs pour configurer correctement le test et mettre à jour configuration en conséquence) et inexactes (car elle ne contenait que le package et de la version, et non celles de 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 de condition préalable. 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).