O Android 9 inclui suporte para obter o serviço de uma determinada instância de HAL com base no dispositivo em que o conjunto de testes de fornecedor (VTS) estão em execução. A execução de testes de HAL do VTS que reconhecem o nome do serviço permite que os desenvolvedores automatizem o teste de extensões do fornecedor, várias HALs e várias instâncias de HAL em execuções de teste do VTS do lado do destino e do host.
Sobre os nomes dos serviços
Cada instância do serviço HAL em execução se registra com um nome de serviço.
Nas versões anteriores do Android, os desenvolvedores que executavam testes VTS da HAL estavam
necessário para definir o nome de serviço correto para o cliente de teste no
getService()
ou deixe o nome em branco e substitua para o padrão
nome do serviço. Estas foram as desvantagens dessa abordagem:
- Confiança no conhecimento do desenvolvedor de teste para definir o serviço correto nome.
- Limitado a testes em uma única instância de serviço por padrão.
- Manutenção manual de nomes de serviço. Como os nomes são codificados, eles precisam ser atualizados manualmente se o nome do serviço mudar.
No Android 9, os desenvolvedores podem receber automaticamente nome de serviço para determinada instância da HAL com base no dispositivo em teste. As vantagens dessa abordagem incluem suporte para testes:
- Extensões HAL do fornecedor. Por exemplo, quando um fornecedor tem implementação da HAL de camera.provider que é executada nos dispositivos do fornecedor com uma nome de serviço personalizado, o VTS pode identificar a instância do fornecedor e executar o teste contra ele.
- Várias instâncias do HAL. Por exemplo, quando a
HAL
graphics.composer
tem duas instâncias (uma com o nome de serviço "default" e outra com o nome de serviço "vr"), o VTS pode identificar as duas instâncias e executar o teste em cada uma delas. - Testes de vários HAL: Usado ao testar várias HALs com várias instâncias. Por exemplo, ao executar o teste VTS que verifica como a HAL keymaster e a HAL gatekeeper trabalham juntas, o VTS pode testar todas as combinações de instâncias de serviço para essas HALs.
Testes do alvo
Para ativar o reconhecimento de nome de serviço em testes no lado do público-alvo, o Android
9 inclui um ambiente de teste personalizável
(VtsHalHidlTargetTestEnvBase
)
que fornece interfaces para:
- Registre HALs de segmentação no teste.
- Liste todas as HALs registradas.
- Receber nomes de serviço para HALs registradas fornecidas pelo framework VTS.
Além disso, o framework VTS fornece suporte de tempo de execução para:
- Pré-processamento do binário de teste para receber todos os HALs de teste registrados.
- Identificar todas as instâncias de serviço em execução e receber o nome do serviço para
cada instância (recuperado com base em
vendor/manifest.xml
). - Cálculo de todas as combinações de instâncias (para oferecer suporte a vários testes de HAL).
- Gerar um novo teste para cada instância de serviço (combinação).
Exemplo:
Configurar testes no lado do destino com reconhecimento de nome de serviço
Para configurar o ambiente de teste para testes com nome de serviço no lado de destino:
- Defina um
testEnvironment
com baseVtsHalHidlTargetTestEnvBase
e registrar as HALs de teste:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Use
getServiceName()
fornecido pelo ambiente de teste para transmitir o nome do serviço:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Registre o ambiente de teste em
main()
einitTest
: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 mais exemplos, consulte
VtsHalCameraProviderV2_4TargetTest.cpp
:
Testes do lado do host do VTS
Os testes do lado do host do VTS executam scripts de teste no lado do host em vez de binários de teste no dispositivo de destino. Para ativar o reconhecimento de nome de serviço para esses testes, faça o seguinte: use modelos do lado do host para executar o mesmo script de teste várias vezes. parâmetros diferentes (semelhante ao teste parametrizado gtest).
- O script hal test especifica a HAL de segmentação. serviços no teste.
- O
hal_hidl_host_test
(subclasse deparam_test
) extrai a(s) HAL(s) de teste registrada(s) do script de teste, identifica os nomes de serviço correspondentes para a HAL de teste, gera combinações de nomes de serviço (para testes multi-HAL) como teste parâmetros. Ele também fornece um métodogetHalServiceName()
, que retorna o nome do serviço correspondente de acordo com o parâmetro transmitido para o caso de teste atual. - O modelo param_test oferece suporte à lógica para aceitar uma lista de parâmetros e executar todos os casos de teste fornecidos em cada parâmetro. Ou seja, para cada caso de teste, ele gera N novos casos de teste parametrizados (N = tamanho dos parâmetros), cada um com um parâmetro específico.
Configurar testes no lado do host com reconhecimento de nome de serviço
Para configurar o ambiente de teste para testes com nome de serviço no lado do host:
- Especifique o serviço HAL de destino no script de teste:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Chame
getHalServiceName()
e transmita o nome para o 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 mais exemplos, consulte
VtsHalMediaOmxStoreV1_0HostTest.py
.
Registrar HALs de teste
Em versões anteriores do Android, o VTS identificava o HAL de teste usando a
opção <precondition-lshal>
configurada em
AndroidTest.xml
. Essa abordagem era difícil de manter, porque
dependia dos desenvolvedores para configurar o teste corretamente e atualizar a
configuração de acordo, e imprecisa, porque continha apenas as informações
do pacote e da versão, e não da interface.
No Android 9, o VTS identifica a HAL de teste usando o reconhecimento de nome de serviço. Os HALs de teste registrados também são úteis para:
- Verificações de pré-condição. Antes de executar um teste HAL, o VTS pode confirmar se a HAL de teste está disponível no dispositivo de destino e pular os testes se não estiver (consulte a Verificação da capacidade de teste do VTS).
- Medição de cobertura. O VTS oferece suporte à medição de cobertura de código entre processos usando o conhecimento sobre os serviços HAL de teste que ele quer medir (ou seja, para limpar a cobertura do processo de serviço HAL).