O Android 9 Vendor Test Suite (VTS) oferece suporte a um método de tempo de execução para usar a configuração do dispositivo para identificar quais testes VTS devem ser ignorados para esse destino de dispositivo.
Flexibilidade de teste VTS
A partir do Android 8.0, os testes VTS são necessários para todos os dispositivos lançados com Android 8.0 e superior. No entanto, nem todos os testes VTS se aplicam a todos os alvos de dispositivos. Por exemplo:
- Se um dispositivo específico não suportar um HAL de teste (por exemplo, IR), o VTS não precisará executar testes para esse teste HAL naquele dispositivo alvo.
- Se vários dispositivos compartilharem o mesmo SoC e imagem do fornecedor, mas tiverem funcionalidades de hardware diferentes, o VTS deverá determinar se um teste deve ser executado ou ignorado para um destino de dispositivo específico.
Tipos de teste VTS
VTS inclui os seguintes tipos de teste:
- Os testes de conformidade garantem a compatibilidade entre a estrutura e as partições do fornecedor. Esses testes devem ser executados (e aprovados) em dispositivos com Android 8.0 ou superior.
- Os testes de não conformidade ajudam os fornecedores a melhorar a qualidade do produto (desempenho/difusão, etc.). Esses testes são opcionais para fornecedores.
Se um teste é um teste de conformidade ou não, depende do plano ao qual pertence. Os testes executados com o plano VTS são considerados testes de conformidade.
Determinar HALs suportados
O VTS pode usar os seguintes arquivos para determinar se o dispositivo alvo suporta um HAL específico:
-
/system/compatibility_matrix.xml
. Reivindica as instâncias HAL exigidas pela estrutura. Exemplo:<hal format="hidl" optional="true"> <name>android.hardware.vibrator</name> <version>1.0-1</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
- O atributo
optional
indica se o HAL é estritamente exigido pela estrutura. - O arquivo pode conter múltiplas entradas para o mesmo HAL (com o mesmo nome), mas com versões e interfaces diferentes.
- O arquivo pode conter configurações de múltiplas
version
para a mesma entrada, indicando que a estrutura pode funcionar com versões diferentes. -
version1.0-1
significa que a estrutura pode funcionar com a versão 1.0 mais baixa e não requer uma versão superior a 1.1.
- O atributo
- Dispositivo
manifest.xml
. Reivindica as instâncias HAL fornecidas pelo fornecedor. Exemplo:<hal format="hidl"> <name>android.hardware.vibrator</name> <transport>hwbinder</transport> <version>1.2</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
- O arquivo pode conter múltiplas entradas para o mesmo HAL (com o mesmo nome), mas com versões e interfaces diferentes.
- Se o arquivo contiver apenas uma configuração
version
única para uma entrada,version1.2
significa que o fornecedor oferece suporte a todas as versões de 1.0 a 1.2.
- lshal . Uma ferramenta no dispositivo que mostra informações de tempo de execução sobre os serviços HAL registrados no
hwservicemanager
. Exemplo:android.hardware.vibrator@1.0::IVibrator/default
lshal
também mostra todos os HALs com implementações de passagem (ou seja, tendo o arquivo-impl.so
correspondente no dispositivo). Exemplo:android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/) android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
Testes de conformidade
Para testes de conformidade, o VTS depende do manifesto do fornecedor para determinar (e testar) todas as instâncias HAL fornecidas pelo dispositivo. Fluxo de decisão:
Testes de não conformidade
Para testes de não conformidade, o VTS depende do manifesto do fornecedor e das saídas lshal
para determinar (e testar) os HALs experimentais não reivindicados no arquivo manifest.xml
. Fluxo de decisão:
Localize o manifesto do fornecedor
O VTS verifica o arquivo manifest.xml
do fornecedor nos seguintes locais, na seguinte ordem:
-
/vendor/etc/vintf/manifest.xml
+ manifesto ODM (se o mesmo HAL for definido em ambos os locais, o manifesto ODM substitui aquele em/vendor/etc/vintf/manifest.xml
) -
/vendor/etc/vintf/manifest.xml
- Arquivo ODM
manifest.xml
, carregado a partir dos seguintes arquivos na seguinte ordem:-
/odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
-
/odm/etc/vintf/manifest.xml
-
/odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
-
/odm/etc/manifest.xml
-
/vendor/manifest.xml
-
Verificador de testabilidade VTS
O vts_testibility_checker
é um binário empacotado com VTS e usado pela estrutura de teste VTS em tempo de execução para determinar se um determinado teste HAL é testável ou não. É baseado em libvintf
para carregar e analisar o arquivo de manifesto do fornecedor e implementa o fluxo de decisão descrito na seção anterior.
Para usar vts_testability_check
:
- Para um teste de conformidade:
vts_testability_check -c -b <bitness> <hal@version>
- Para um teste de não conformidade:
vts_testability_check -b <bitness> <hal@version>
A saída de vts_testability_check
usa o seguinte formato json:
{testable: <True/False> Instances: <list of instance names of HAL service>}
Determinar HALs acessados
Para determinar quais HALs são acessados pelos testes VTS, certifique-se de que cada teste HAL use o modelo VtsHalHidlTargetTestEnvBase
para registrar os HAL(s) acessados no teste. A estrutura de teste VTS pode então extrair os HALs registrados ao pré-processar o teste.
Para testes de conformidade, você também pode verificar /system/etc/vintf/manifest.xml
. Se um HAL for definido aqui, o VTS deverá testá-lo. (Para os serviços HAL fornecidos pelo sistema (por exemplo, graphics.composer/vr
), os HALs são declarados em /system/manifest.xml
.)