Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Prueba HAL consciente del nombre del servicio

Android 9 incluye soporte para obtener el nombre de servicio de una instancia de HAL determinada según el dispositivo en el que se ejecutan las pruebas de Vendor Test Suite (VTS). La ejecución de pruebas de VTS HAL que reconocen el nombre del servicio permite a los desarrolladores automatizar las extensiones de proveedores de pruebas, múltiples HAL y múltiples instancias de HAL en las ejecuciones de prueba de VTS del lado del destino y del host.

Acerca de los nombres de los servicios

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

En versiones anteriores de Android, los desarrolladores que ejecutaban pruebas VTS HAL debían establecer el nombre de servicio correcto para el cliente de prueba en getService() o dejar el nombre vacío y volver al nombre de servicio predeterminado. Las desventajas de este enfoque incluyen:

  • Confianza en el conocimiento del desarrollador de la prueba para establecer el nombre de servicio correcto.
  • Limitado a realizar pruebas en una única instancia de servicio de forma predeterminada.
  • Mantenimiento manual de los nombres de los servicios (es decir, debido a que los nombres están codificados de forma rígida, deben actualizarse manualmente si cambia el nombre del servicio.

En Android 9, los desarrolladores pueden obtener automáticamente el nombre del servicio para una instancia de HAL determinada según el dispositivo bajo prueba. Las ventajas de este enfoque incluyen soporte para pruebas:

  • Extensiones HAL del proveedor . Por ejemplo, cuando un proveedor tiene una implementación de camera.provider HAL que se ejecuta en dispositivos de proveedor con un nombre de servicio personalizado, VTS puede identificar la instancia del proveedor y ejecutar la prueba en ella.
  • Varias instancias de HAL . Por ejemplo, cuando el editor de graphics.composer .
  • Prueba Multi-HAL . Se usa cuando se prueban múltiples HAL con múltiples instancias Por ejemplo, cuando se ejecuta la prueba VTS que verifica cómo el keymaster y el portero HAL trabajan juntos, VTS puede probar todas las combinaciones de instancias de servicio para esos HAL.

Pruebas del lado del objetivo

Para habilitar el reconocimiento del nombre del servicio para las pruebas del lado del destino, Android 9 incluye un entorno de prueba personalizable ( VtsHalHidlTargetTestEnvBase ) que proporciona interfaces para:

  • Registre el objetivo de HAL (s) en la prueba.
  • Enumere todos los HAL registrados.
  • Obtenga el (los) nombre (s) de servicio para los HAL registrados proporcionados por el marco VTS.

Además, el marco VTS proporciona soporte en tiempo de ejecución para:

  • Preprocesar el binario de prueba para obtener todos los HAL de prueba registrados.
  • Identificar todas las instancias de servicio en ejecución y obtener el nombre de servicio para cada instancia (recuperado en base a vendor/manifest.xml ).
  • Cálculo de todas las combinaciones de instancias (para admitir múltiples pruebas HAL).
  • Generando una nueva prueba para cada instancia de servicio (combinación).

Ejemplo:

Runtime support for target-side testing

Figura 1. Soporte de tiempo de ejecución del marco VTS para las pruebas del lado del destino

Configuración de pruebas del lado del destino que reconocen el nombre del servicio

Para configurar su entorno de prueba para las pruebas que reconocen el nombre del servicio del lado del destino:

  1. Defina un testEnvironment basado en VtsHalHidlTargetTestEnvBase y registre las HAL de prueba:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Utilice getServiceName() proporcionado por el entorno de prueba para pasar el nombre del servicio:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registre el entorno de prueba en main() e 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 obtener ejemplos adicionales, consulte VtsHalCameraProviderV2_4TargetTest.cpp .

Pruebas del lado del host de VTS

Las pruebas del lado del host de VTS ejecutan scripts de prueba en el lado del host en lugar de probar los binarios en el dispositivo de destino. Para habilitar el reconocimiento del nombre del servicio para estas pruebas, puede usar plantillas del lado del host para ejecutar el mismo script de prueba varias veces con diferentes parámetros (similar a la prueba parametrizada gtest).

Runtime support for host-side testing

Figura 2. Soporte de tiempo de ejecución del marco VTS para pruebas del lado del host
  • El script de prueba hal especifica los servicios HAL de destino en la prueba.
  • hal_hidl_host_test (subclase de param_test ) toma las HAL de prueba registradas del script de prueba, identifica los nombres de servicio correspondientes para la HAL de prueba y luego genera combinaciones de nombres de servicio (para pruebas de HAL múltiples) como parámetros de prueba. También proporciona un método getHalServiceName() que devuelve el nombre del servicio correspondiente según el parámetro pasado al caso de prueba actual.
  • La plantilla param_test admite la lógica para aceptar una lista de parámetros y ejecutar todos los casos de prueba dados contra cada parámetro. Es decir, para cada caso de prueba genera N nuevos casos de prueba parametrizados (N = tamaño de los parámetros), cada uno con un parámetro dado.

Configuración de pruebas del lado del host que reconocen el nombre del servicio

Para configurar su entorno de prueba para las pruebas que reconocen el nombre del servicio del lado del host:

  1. Especifique el servicio HAL de destino en el script de prueba:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Llame a getHalServiceName() y pase 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 obtener ejemplos adicionales, consulte VtsHalMediaOmxStoreV1_0HostTest.py .

Registro de HAL de prueba

En versiones anteriores de Android, VTS identificó la prueba HAL mediante la opción <precondition-lshal> configurada en AndroidTest.xml . Este enfoque era difícil de mantener (ya que dependía de los desarrolladores para configurar la prueba correctamente y actualizar la configuración en consecuencia) e inexacto (ya que solo contenía la información del paquete y la versión y no la información de la interfaz).

En Android 9, VTS identifica la prueba HAL mediante el reconocimiento del nombre del servicio. Los HAL de prueba registrados también son útiles para:

  • Verificaciones de condiciones previas . Antes de ejecutar una prueba HAL, VTS puede confirmar que la prueba HAL está disponible en el dispositivo de destino y omitir las pruebas si no lo está (consulte la verificación de probabilidad de VTS ).
  • Medición de cobertura . VTS admite la medición de cobertura de código entre procesos a través del conocimiento sobre los servicios HAL de prueba que desea medir (es decir, para eliminar la cobertura del proceso de servicio hal).