Prueba de HAL del nombre del servicio

Android 9 admite la obtención del servicio nombre de una instancia de HAL determinada en función del dispositivo en el que el paquete de pruebas del proveedor (VTS) se están ejecutando. Cómo ejecutar pruebas HAL de VTS que reconocen el nombre del servicio les permite a los desarrolladores automatizar las pruebas de extensiones del proveedor, varias HAL y varias instancias de HAL en las ejecuciones de pruebas de VTS del lado del host y del destino.

Información acerca de los nombres de servicios

Cada instancia del servicio de HAL en ejecución se registra con un nombre de servicio.

En versiones anteriores de Android, los desarrolladores que ejecutaban pruebas de HAL de VTS necesario para configurar el nombre de servicio correcto para el cliente de prueba en getService() o deja el nombre vacío y regresa a la configuración predeterminada. el nombre del servicio. Las desventajas de este enfoque incluyen las siguientes:

  • Dependencia del conocimiento del desarrollador de pruebas para configurar el servicio correcto de la fuente de datos.
  • Se limita a las pruebas en una única instancia de servicio de forma predeterminada.
  • Mantenimiento manual de los nombres de servicios (es decir, debido a que los nombres están codificados, se deben actualizar manualmente si cambia el nombre del servicio.

En Android 9, los desarrolladores pueden obtener nombre del servicio para una instancia de HAL determinada en función del dispositivo sometido a prueba. Las ventajas de este enfoque incluyen la compatibilidad para realizar pruebas:

  • Extensiones de HAL del proveedor: Por ejemplo, cuando un proveedor tiene un implementación de HAL de camera.provider que se ejecuta en dispositivos de proveedores con un nombre personalizado del servicio, VTS puede identificar la instancia del proveedor y ejecutar la prueba y defenderte.
  • Varias instancias de HAL. Por ejemplo, cuando el La HAL de graphics.composer tiene dos instancias (una con nombre de servicio) “predeterminado” y otro con el nombre de servicio "vr"), el VTS puede identificar tanto instancias como ejecuta la prueba en cada uno de ellos.
  • Pruebas de varias HAL. Se usa cuando se prueban varias HAL con varias instancias. Por ejemplo, cuando se ejecuta la prueba de VTS que verifica cómo Si la HAL del controlador y Keymaster funciona en conjunto, los VTS pueden probar todas las combinaciones. de instancias de servicio para esas HAL.

Pruebas del lado del objetivo

Para habilitar el reconocimiento del nombre del servicio en pruebas orientadas al objetivo, Android 9 incluye un entorno de pruebas personalizable (VtsHalHidlTargetTestEnvBase) que proporciona interfaces para lo siguiente:

  • Registra las HALs de destino en la prueba.
  • Enumera todas las HAL registradas.
  • Obtiene los nombres de los servicios de las HAL registradas que proporciona el framework de VTS.

Además, el framework de VTS proporciona compatibilidad con el entorno de ejecución para lo siguiente:

  • Procesamiento previo del objeto binario de prueba para obtener todas las HAL de prueba registradas
  • Identificar todas las instancias de servicio en ejecución y obtener el nombre del servicio para cada instancia (recuperada según vendor/manifest.xml).
  • Cómo calcular todas las combinaciones de instancias (para admitir varias HAL) pruebas).
  • Generarás una prueba nueva para cada instancia de servicio (combinación).

Ejemplo:

Compatibilidad del entorno de ejecución para pruebas del lado del destino

Figura 1: Compatibilidad con el entorno de ejecución del framework de VTS para pruebas del lado del destino

Configura pruebas de destino con reconocimiento de nombres de servicio

Si quieres configurar el entorno de pruebas para las pruebas con reconocimiento de nombres del servicio del destino, haz lo siguiente:

  1. Define un testEnvironment basado en VtsHalHidlTargetTestEnvBase y registra HAL de prueba:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Usa getServiceName() que proporciona el entorno de pruebas para aprobar. nombre del servicio:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registra el entorno de pruebas en main() y 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();
    }

Para ver más ejemplos, consulta VtsHalCameraProviderV2_4TargetTest.cpp

Pruebas de VTS del lado del host

Las pruebas del host de VTS ejecutan secuencias de comandos de prueba en el host en lugar de probar los objetos binarios en el dispositivo de destino. Para habilitar el reconocimiento del nombre del servicio en estas pruebas, puedes hacer lo siguiente: usar plantillas del host para ejecutar la misma secuencia de comandos de prueba varias veces en parámetros diferentes (similar a la prueba parametrizada de gtest).

Compatibilidad con el entorno de ejecución para las pruebas del lado del host

Figura 2: Compatibilidad con el entorno de ejecución del framework de VTS para el host prueba
  • La secuencia de comandos hal test especifica la HAL de destino. servicios en la prueba.
  • El hal_hidl_host_test (subclase de param_test) toma las HAL de prueba registradas de secuencia de comandos de prueba, identifica los nombres de servicio correspondientes para la HAL de prueba genera combinaciones de nombres de servicios (para pruebas de varias HAL) como prueba parámetros. También proporciona un método getHalServiceName(), devuelve el nombre del servicio correspondiente según el parámetro que se pasó el caso de prueba actual.
  • El param_test admite que la lógica acepte una lista de parámetros y ejecute todos los los casos de prueba con cada parámetro. Por ejemplo, En cada caso de prueba, genera N valores nuevos caso de prueba parametrizado (N = tamaño de los parámetros), cada uno con un parámetro.

Configura pruebas del host con reconocimiento del nombre del servicio

Si deseas configurar el entorno de pruebas para realizar pruebas con reconocimiento de nombres del servicio del host, haz lo siguiente:

  1. Especifica el servicio HAL de destino en la secuencia de comandos de prueba:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Llama a getHalServiceName() y pasa el nombre a 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))
    

Para ver más ejemplos, consulta VtsHalMediaOmxStoreV1_0HostTest.py

Cómo registrar HAL de prueba

En versiones anteriores de Android, el VTS identificaba la HAL de prueba con el La opción <precondition-lshal> configurada en AndroidTest.xml Este enfoque era difícil de mantener (ya que se basó en los desarrolladores para configurar la prueba correctamente y actualizar el configuración adecuada) e imprecisa (ya que solo contenía el paquete y la información de la versión, no la de la interfaz).

En Android 9, VTS identifica la HAL de prueba usando reconocimiento del nombre de servicio. Las HAL de prueba registradas también son útiles para lo siguiente:

  • Verificaciones de condiciones previas. Antes de ejecutar una prueba HAL, el VTS puede Confirma que la HAL de prueba esté disponible en el dispositivo de destino y omite las pruebas. si no es así (consulte el artículo VTS) verificación de capacidad de prueba).
  • Medición de cobertura. El VTS admite código entre procesos medición de cobertura mediante el conocimiento de los servicios de HAL de prueba que desea (por ejemplo, para limpiar la cobertura del proceso de servicio de hal).