O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Teste HAL ciente do nome do serviço

O Android 9 inclui suporte para obter o nome do serviço de uma determinada instância HAL com base no dispositivo no qual os testes Vendor Test Suite (VTS) estão sendo executados. A execução de testes de VTS HAL que reconhecem o nome do serviço permite que os desenvolvedores automatizem o teste de extensões de fornecedores, vários HALs e várias instâncias de HAL em execuções de teste de VTS no destino e no host.

Sobre nomes de serviço

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 executando testes VTS HAL foram necessários para definir o nome do serviço correto para o cliente de teste em getService() ou deixe o nome esvaziar e fallback para o nome do serviço padrão. As desvantagens dessa abordagem incluem:

  • Confiança no conhecimento do desenvolvedor de teste para definir o nome de serviço correto.
  • Limitado a testar em uma única instância de serviço por padrão.
  • Manutenção manual de nomes de serviço (ou seja, como os nomes são codificados, eles devem ser atualizados manualmente se o nome do serviço mudar.

No Android 9, os desenvolvedores podem obter automaticamente o nome do serviço para uma determinada instância HAL com base no dispositivo em teste. As vantagens dessa abordagem incluem suporte para testes:

  • Extensões fornecedor HAL. Por exemplo, quando um fornecedor tem uma implementação de camera.provider HAL que é executada em dispositivos do fornecedor com um nome de serviço personalizado, o VTS pode identificar a instância do fornecedor e executar o teste nela.
  • Várias instâncias de HAL. Por exemplo, quando o graphics.composer HAL tem dois casos (um com nome do serviço "default" e outra com o nome do serviço "vr"), VTS pode identificar ambos os casos e execute o teste contra cada um deles.
  • Testes multi-HAL. Usado ao testar vários HALs com várias instâncias Por exemplo, ao executar o teste VTS que verifica como o keymaster e o gatekeeper HAL funcionam juntos, o VTS pode testar todas as combinações de instâncias de serviço para esses HALs.

Testes do lado do alvo

Para ativar a consciência nome do serviço para o teste-side alvo, Android 9 inclui um ambiente de teste personalizável ( VtsHalHidlTargetTestEnvBase ) que fornece interfaces para:

  • Registre HAL (s) de destino no teste.
  • Liste todos os HAL (s) registrados.
  • Obtenha o (s) nome (s) de serviço para HAL (s) registrado (s) fornecido (s) pela estrutura VTS.

Além disso, a estrutura VTS fornece suporte de tempo de execução para:

  • Pré-processando o binário de teste para obter todos os HAL (s) de teste registrados.
  • Identificar todas as instâncias de serviço em execução e recebendo o nome do serviço para cada instância (recuperado com base em vendor/manifest.xml ).
  • Calculando todas as combinações de instância (para suportar vários testes HAL).
  • Gerando um novo teste para cada instância de serviço (combinação).

Exemplo:

Runtime support for target-side testing

Figura 1. VTS suporte da estrutura de tempo de execução para o teste do lado do alvo

Configurando testes do lado do destino que reconhecem o nome do serviço

Para configurar seu ambiente de teste para teste de reconhecimento de nome de serviço no lado do destino:

  1. Definir um testEnvironment baseado em VtsHalHidlTargetTestEnvBase e registrar HALs teste:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Use getServiceName() fornecido pelo ambiente de teste para passar o nome do serviço:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registre o ambiente de teste em 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 exemplos adicionais, referem-se a VtsHalCameraProviderV2_4TargetTest.cpp .

Testes do lado do host VTS

Os testes do lado do host VTS executam scripts de teste no lado do host em vez de binários de teste no dispositivo de destino. Para habilitar o reconhecimento do nome do serviço para esses testes, você pode usar modelos do lado do host para executar o mesmo script de teste várias vezes em parâmetros diferentes (semelhante ao teste parametrizado gtest).

Runtime support for host-side testing

Figura 2. VTS suporte da estrutura de tempo de execução para o teste do lado do host
  • Os hal especifica de script teste o serviço HAL segmentação (s) no teste.
  • O hal_hidl_host_test (subclasse de param_test ) converte o, identifica o nome de serviço correspondente registado testar HAL (s) a partir de script de teste (s) para o HAL testar, então gera combinações de nomes de serviços (por multi-testes HAL) como parâmetros de ensaio. Ele também fornece um método getHalServiceName() que devolve o nome de serviço correspondente de acordo com o parâmetro transmitido para o caso de ensaio corrente.
  • O param_test lógica suportes modelo para aceitar uma lista de parâmetros e executar todos os casos de teste dadas contra 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 determinado parâmetro.

Configurando testes do lado do host com reconhecimento de nome de serviço

Para configurar seu ambiente de teste para teste ciente de nome de serviço do lado do host:

  1. Especifique o serviço de destino HAL no script de teste:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Chamada getHalServiceName() e passar o nome para 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 exemplos adicionais, referem-se a VtsHalMediaOmxStoreV1_0HostTest.py .

Registrando HALs de teste

Nas versões anteriores do Android, VTS identificou o HAL testar usando o <precondition-lshal> opção configurada em AndroidTest.xml . Essa abordagem era difícil de manter (pois dependia dos desenvolvedores para configurar o teste corretamente e atualizar a configuração de acordo) e imprecisa (pois continha apenas as informações do pacote e da versão e não as informações da interface).

No Android 9, o VTS identifica o HAL de teste usando reconhecimento de nome de serviço. Os HALs de teste registrados também são úteis para:

  • Cheques pré-condição. Antes de executar um teste de HAL, VTS pode confirmar o HAL teste está disponível no dispositivo de destino e ignorar os testes, se não for (referem-se a verificação de capacidade de teste VTS ).
  • Medição cobertura. O VTS oferece suporte à medição de cobertura de código de processo cruzado por meio do conhecimento sobre os serviços HAL de teste que deseja medir (ou seja, para liberar a cobertura para o processo de serviço hal).