Verificación de capacidad de prueba de HAL

El paquete de pruebas para proveedores (VTS) de Android 9 admite un método de tiempo de ejecución para usar la configuración del dispositivo y así identificar qué pruebas de VTS se deben omitir para ese dispositivo de destino.

Flexibilidad de las pruebas del VTS

A partir de Android 8.0, las pruebas de VTS son obligatorias para todos los dispositivos lanzados con Android 8.0 y versiones posteriores Sin embargo, no todas las pruebas de VTS se aplican a todos los dispositivos objetivos. Por ejemplo:

  • Si un dispositivo específico no admite un HAL de prueba (p. ej., IR), VTS no necesita ejecutar pruebas para esa prueba de HAL en ese dispositivo de destino.
  • Si varios dispositivos comparten el mismo SoC y la misma imagen del proveedor, pero tienen diferentes funcionalidades de hardware, VTS debe determinar si se debe ejecutar o omitir una prueba para un dispositivo de destino específico.

Tipos de pruebas de VTS

La VTS incluye los siguientes tipos de pruebas:

  • Las pruebas de cumplimiento garantizan la compatibilidad entre el framework y las particiones del proveedor. Es necesario que estas pruebas se ejecuten (y aprueben) en dispositivos que se lanzan con Android 8.0 o versiones posteriores.
  • Las pruebas de incumplimiento ayudan a los proveedores a mejorar la calidad de los productos (rendimiento, fuzzing, etcétera). Estas pruebas son opcionales para los proveedores.

Que una prueba sea una prueba de cumplimiento o no depende del plan a la que pertenezca a los que tiene acceso una cuenta. Las pruebas que se ejecutan con el plan de VTS se consideran pruebas de cumplimiento.

Determina los HAL compatibles

VTS puede usar los siguientes archivos para determinar si el dispositivo de destino admite un HAL específico:

  • /system/compatibility_matrix.xml: Reclama las instancias de HAL que requiere el framework. Ejemplo:
    <hal format="hidl" optional="true">
        <name>android.hardware.vibrator</name>
        <version>1.0-1</version>
        <interface>
           <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • El atributo optional indica si el framework requiere estrictamente el HAL.
    • El archivo puede contener varias entradas para la misma HAL (con el mismo nombre). pero con diferentes versiones e interfaces.
    • El archivo puede contener varias configuraciones de version para la misma entrada, lo que indica que el framework puede funcionar con diferentes versiones.
    • version1.0-1 significa que el framework puede funcionar con la menor versión 1.0 y no requiere una versión posterior a 1.1.
  • Dispositivo manifest.xml. Reclama las instancias de HAL que proporciona el proveedor. Ejemplo:
    <hal format="hidl">
        <name>android.hardware.vibrator</name>
        <transport>hwbinder</transport>
        <version>1.2</version>
        <interface>
            <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • El archivo puede contener varias entradas para la misma HAL (con el mismo nombre). pero con diferentes versiones e interfaces.
    • Si el archivo contiene una sola configuración version para una entrada, version1.2 significa que el proveedor admite todas las versiones de 1.0 a 1.2.
  • lshal. Una herramienta en el dispositivo que muestra información del tiempo de ejecución sobre los servicios de HAL registrados con hwservicemanager Ejemplo:
    android.hardware.vibrator@1.0::IVibrator/default

    lshal también muestra todas las HALs que con transferencia implementaciones (es decir, tener el archivo -impl.so correspondiente en el dispositivo). Ejemplo:
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)

Pruebas de cumplimiento

En el caso de las pruebas de cumplimiento, VTS se basa en el manifiesto del proveedor para determinar (y probar) todas las instancias de HAL que proporciona el dispositivo. Flujo de decisión:

Verificación de capacidad de prueba para el cumplimiento

Figura 1: Verificación de comprobabilidad para las pruebas de cumplimiento de VTS

Pruebas de incumplimiento

En el caso de las pruebas de incumplimiento, VTS se basa en el manifiesto del proveedor y en los resultados de lshal para determinar (y probar) los HAL experimentales que no se reclamaron en el archivo manifest.xml. Flujo de decisión:

Verificación de la capacidad de prueba para detectar incumplimientos

Figura 2: Verificación de la capacidad de prueba del incumplimiento de VTS pruebas

Cómo ubicar el manifiesto del proveedor

El VTS verifica el archivo manifest.xml del proveedor en la siguiente situación: lugares en el siguiente orden:

  1. /vendor/etc/vintf/manifest.xml + Manifiesto de ODM (si se define el mismo HAL en ambos lugares, el manifiesto de ODM anula el de /vendor/etc/vintf/manifest.xml)
  2. /vendor/etc/vintf/manifest.xml
  3. Archivo ODM manifest.xml, cargado de los siguientes archivos en el siguiente orden:
    1. /odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
    2. /odm/etc/vintf/manifest.xml
    3. /odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
    4. /odm/etc/manifest.xml
    5. /vendor/manifest.xml

Verificador de capacidad de prueba de VTS

El vts_testibility_checker es un objeto binario empaquetado con VTS y utilizado por VTS en el tiempo de ejecución para determinar si una prueba HAL determinada se comprobable o no. Se basa en libvintf para cargar y analizar el archivo de manifiesto del proveedor, y también implementa el flujo de decisión descrito en la sección anterior.

Para usar vts_testability_check, haz lo siguiente:

  • Para una prueba de cumplimiento, haz lo siguiente:
    vts_testability_check -c -b <bitness>  <hal@version>
  • Para una prueba de incumplimiento, haz lo siguiente:
    vts_testability_check -b <bitness>  <hal@version>

El resultado de vts_testability_check usa el siguiente formato JSON:

{testable: <True/False> Instances: <list of instance names of HAL service>}

Determina los HAL a los que se accedió

Para determinar a qué HALs acceden las pruebas de VTS, asegúrate de que cada prueba usa el VtsHalHidlTargetTestEnvBase para registrar las HAL a las que se accedió en la prueba. Luego, el framework de pruebas de VTS puede extraer los HAL registrados cuando se preprocesa la prueba.

Para las pruebas de cumplimiento, también puedes consultar /system/etc/vintf/manifest.xml. Si se define un HAL aquí, VTS debería probarlo. (Para los servicios HAL que proporciona el sistema (p.ej., graphics.composer/vr), las HAL se declaran en /system/manifest.xml).