Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Nome servizio Aware HAL Testing

Android 9 include il supporto per ottenere il nome del servizio di una determinata istanza HAL in base al dispositivo su cui sono in esecuzione i test Vendor Test Suite (VTS). L'esecuzione di test HTS VTS in base al nome del servizio consente agli sviluppatori di automatizzare le estensioni del fornitore di test, più HAL e più istanze HAL su entrambe le esecuzioni di test VTS lato destinazione e host.

Informazioni sui nomi dei servizi

Ogni istanza del servizio HAL in esecuzione si registra con un nome di servizio.

Nelle versioni precedenti di Android, agli sviluppatori che eseguivano i test VTS HAL era richiesto di impostare il nome del servizio corretto per il client di test in getService() o di lasciare il nome vuoto e il fallback sul nome del servizio predefinito. Gli svantaggi di questo approccio includevano:

  • Affidamento alle conoscenze dello sviluppatore del test per impostare il nome del servizio corretto.
  • Limitato al test su una singola istanza di servizio per impostazione predefinita.
  • Manutenzione manuale dei nomi dei servizi (ovvero poiché i nomi sono codificati, devono essere aggiornati manualmente se il nome del servizio cambia.

In Android 9, gli sviluppatori possono ottenere automaticamente il nome del servizio per una determinata istanza HAL in base al dispositivo in prova. I vantaggi di questo approccio includono il supporto per i test:

  • Estensioni HAL del fornitore . Ad esempio, quando un fornitore ha un'implementazione di HAL camera.provider che viene eseguito su dispositivi del fornitore con un nome di servizio personalizzato, VTS può identificare l'istanza del fornitore ed eseguire il test su di essa.
  • Più istanze HAL . Ad esempio, quando HAL graphics.composer ha due istanze (una con il nome del servizio "predefinito" e una con il nome del servizio "vr"), VTS può identificare entrambe le istanze ed eseguire il test su ciascuna di esse.
  • Test multi-HAL . Utilizzato durante il test di più HAL con più istanze Ad esempio, quando si esegue il test VTS che verifica come il keymaster e il gatekeeper HAL lavorano insieme, VTS può testare tutte le combinazioni di istanze di servizio per tali HAL.

Test sul lato bersaglio

Per abilitare la consapevolezza del nome del servizio per i test sul lato target, Android 9 include un ambiente di test personalizzabile ( VtsHalHidlTargetTestEnvBase ) che fornisce interfacce per:

  • Registrati come target HAL (s) nel test.
  • Elencare tutti gli HAL registrati.
  • Ottieni i nomi dei servizi per gli HAL registrati forniti dal framework VTS.

Inoltre, il framework VTS fornisce supporto di runtime per:

  • Pre-elaborazione del file binario di test per ottenere tutti gli HAL di test registrati.
  • Identificazione di tutte le istanze del servizio in esecuzione e ottenimento del nome del servizio per ciascuna istanza (recuperata in base a vendor/manifest.xml ).
  • Calcolo di tutte le combinazioni di istanze (per supportare più test HAL).
  • Generazione di un nuovo test per ogni istanza del servizio (combinazione).

Esempio:

Runtime support for target-side testing

Figura 1. Supporto del runtime del framework VTS per i test sul lato target

Impostazione dei test sul lato target con il nome del servizio

Per configurare l'ambiente di test per i test con riconoscimento del nome del servizio sul lato target:

  1. Definire un ambiente di testEnvironment basato su VtsHalHidlTargetTestEnvBase e registrare gli HAL di test:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Utilizzare getServiceName() fornito dall'ambiente di test per passare il nome del servizio:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registrare l'ambiente di test in 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();
    }

Per ulteriori esempi, consultare VtsHalCameraProviderV2_4TargetTest.cpp .

Test lato host VTS

I test lato host VTS eseguono script di test sul lato host anziché binari di test sul dispositivo di destinazione. Per abilitare la consapevolezza del nome del servizio per questi test, è possibile utilizzare i modelli lato host per eseguire lo stesso script di test più volte su parametri diversi (simile al test con parametri gtest).

Runtime support for host-side testing

Figura 2. Supporto runtime del framework VTS per test lato host
  • Lo script hal test specifica i servizi HAL di targeting nel test.
  • hal_hidl_host_test (sottoclasse di param_test ) accetta gli HAL di test registrati dallo script di test, identifica i nomi di servizio corrispondenti per l'HAL di test, quindi genera combinazioni di nomi di servizio (per test multi-HAL) come parametri di test. Fornisce inoltre un metodo getHalServiceName() che restituisce il nome del servizio corrispondente in base al parametro passato al caso di test corrente.
  • Il modello param_test supporta la logica per accettare un elenco di parametri ed eseguire tutti i casi di test indicati per ciascun parametro. Vale a dire per ogni caso di test genera N nuovo caso di test parametrizzato (N = dimensione dei parametri), ciascuno con un dato parametro.

Impostazione dei test sul lato host in base al nome del servizio

Per configurare l'ambiente di test per i test con riconoscimento del nome del servizio lato host:

  1. Specificare il servizio HAL di destinazione nello script di test:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Chiama getHalServiceName() e passa il nome 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))
    

Per ulteriori esempi, consultare VtsHalMediaOmxStoreV1_0HostTest.py .

Registrazione degli HAL di prova

Nelle versioni precedenti di Android, VTS ha identificato l'HAL di test utilizzando l'opzione <precondition-lshal> configurata in AndroidTest.xml . Questo approccio era difficile da mantenere (in quanto si basava sugli sviluppatori per configurare correttamente il test e aggiornare la configurazione di conseguenza) e inaccurato (in quanto conteneva solo le informazioni sul pacchetto e sulla versione e non le informazioni sull'interfaccia).

In Android 9, VTS identifica l'HAL di test utilizzando la consapevolezza del nome del servizio. Gli HAL di test registrati sono utili anche per:

  • Controlli preliminari . Prima di eseguire un test HAL, VTS può confermare che il test HAL è disponibile sul dispositivo di destinazione e saltare i test in caso contrario (fare riferimento al controllo di testabilità VTS ).
  • Misura della copertura . VTS supporta la misurazione della copertura del codice tra processi attraverso la conoscenza dei servizi HAL di test che vuole misurare (cioè per svuotare la copertura per il processo di hal service).