Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Prueba HAL consciente del nombre del servicio

Android 9 incluye soporte para obtener el nombre de servicio de una instancia de HAL determinada en función del 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 a sí misma con un nombre de servicio.

En las versiones anteriores de Android, los desarrolladores de funcionamiento se requieren pruebas VTS HAL para establecer el nombre de servicio correcto para el cliente de prueba en getService() o dejar el nombre vacío y de respaldo al nombre de servicio por defecto. 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, 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 en función del dispositivo bajo prueba. Las ventajas de este enfoque incluyen soporte para pruebas:

  • Extensiones proveedor de HAL. 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.
  • Instancias HAL múltiples. Por ejemplo, cuando el graphics.composer HAL tiene dos casos (uno con el nombre del servicio "default" y una con el nombre del servicio "VR"), VTS puede identificar ambos casos y ejecute la prueba contra cada uno de ellos.
  • Las pruebas 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

Permitir que se conozcan el nombre del servicio para la prueba del lado del objetivo, 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.
  • La identificación de todas las instancias de servicio en ejecución y obtener el nombre del servicio para cada instancia (recuperada 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

Apoyo marco de tiempo de ejecución Figura 1. VTS para la prueba del lado del objetivo

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. Definir un testEnvironment basado en VtsHalHidlTargetTestEnvBase y registrar HAL prueba:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Uso 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. Registrar el entorno de prueba en el 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 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 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 de gtest).

Runtime support for host-side testing

Apoyo marco de tiempo de ejecución Figura 2. VTS para la prueba del lado del anfitrión
  • El script de prueba hal especifica el servicio de orientación HAL (s) en la prueba.
  • El hal_hidl_host_test (subclase de param_test ) realiza el Registro de Control HAL (s) a partir de la escritura de prueba, se identifica el nombre del servicio correspondiente (s) para la HAL de prueba, a continuación, genera combinaciones de nombre de servicio (para multi-HAL pruebas) como parámetros de prueba. También proporciona un método getHalServiceName() que devuelve el nombre del servicio correspondiente de acuerdo con el parámetro pasado al caso de prueba actual.
  • El param_test lógica soportes plantilla para aceptar una lista de parámetros y ejecutar todos los casos de prueba dadas en contra de 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. Especificar el servicio HAL objetivo en la escritura de la prueba:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Llamada getHalServiceName() y pasar el nombre de Hal init:
    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 ejemplos adicionales, consulte VtsHalMediaOmxStoreV1_0HostTest.py .

Registro de HAL de prueba

En las versiones anteriores de Android, VTS identificada la HAL prueba utilizando el <precondition-lshal> opción 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:

  • Cheques condición previa. Antes de ejecutar una prueba de HAL, VTS puede confirmar la HAL prueba está disponible en el dispositivo de destino y pase las pruebas si no lo es (consulte cheque capacidad de prueba VTS ).
  • Medición de Cobertura. VTS admite la medición de cobertura de código de proceso cruzado a través del conocimiento sobre los servicios de prueba HAL que desea medir (es decir, para eliminar la cobertura del proceso de servicio hal).