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:
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:
- Define un
testEnvironment
basado enVtsHalHidlTargetTestEnvBase
y registra HAL de prueba:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- 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.
- Registra el entorno de pruebas en
main()
yinitTest
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).
- La secuencia de comandos hal test especifica la HAL de destino. servicios en la prueba.
- El
hal_hidl_host_test
(subclase deparam_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étodogetHalServiceName()
, 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:
- Especifica el servicio HAL de destino en la secuencia de comandos de prueba:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- 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).