Test HAL sensibile al nome del servizio

Android 9 include l'assistenza per ottenere il servizio nome di una determinata istanza HAL in base al dispositivo su cui il Vendor Test Suite (VTS) in esecuzione. Esecuzione di test VTS HAL consapevoli del nome servizio consente agli sviluppatori di automatizzare i test delle estensioni dei fornitori, di più HAL e più istanze HAL nelle esecuzioni di test VTS lato host e di destinazione.

Informazioni sui nomi dei servizi

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

Nelle versioni precedenti di Android, gli sviluppatori che eseguivano test VTS HAL venivano necessario impostare il nome servizio corretto per il client di test in getService() o lascia il nome vuoto e utilizza il valore di riserva predefinito il nome del servizio. Gli svantaggi di questo approccio includevano:

  • Affidarsi alle conoscenze dello sviluppatore di test per impostare il servizio corretto .
  • Limitato ai test su una singola istanza di servizio per impostazione predefinita.
  • Manutenzione manuale dei nomi dei servizi (ad esempio perché i nomi sono hard-coded, devono essere aggiornati manualmente se il nome del servizio cambia.

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

  • Estensioni HAL del fornitore. Ad esempio, quando un fornitore ha implementazione dell'HAL camera.provider che viene eseguito sui dispositivi del fornitore con un personalizzato nome del servizio, VTS può identificare l'istanza del fornitore ed eseguire il test di risposta.
  • Più istanze HAL. Ad esempio, quando graphics.composer HAL ha due istanze (una con il nome del servizio) "predefinito" e una con il nome di servizio "vr"), VTS può identificare sia istanze eseguire il test su ognuno di essi.
  • Test multi-HAL. Utilizzato per il test di più HAL con Ad esempio, durante l'esecuzione del test VTS che verifica il keymaster e il gatekeeper HAL funzionano insieme, VTS può testare tutte le combinazioni di istanze di servizio per quegli HAL.

Test lato target

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

  • Registra gli HAL target nel test.
  • Elenca tutti gli HAL registrati.
  • Ottieni i nomi dei servizi per gli HAL registrati forniti dal framework VTS.

Inoltre, il framework VTS supporta il runtime per:

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

Esempio:

Supporto del runtime per i test lato destinazione

Figura 1. Supporto del runtime del framework VTS per i test lato destinazione
di Gemini Advanced.

Configura i test lato destinazione sensibili al nome del servizio

Per configurare l'ambiente di test per il test sensibile al nome del servizio lato destinazione:

  1. Definisci un valore testEnvironment in base a VtsHalHidlTargetTestEnvBase e registra gli HAL di test:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Utilizza il valore getServiceName() fornito dall'ambiente di test per superare il test nome servizio:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Registra 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, consulta: VtsHalCameraProviderV2_4TargetTest.cpp.

Test lato host VTS

I test lato host VTS eseguono script di test sul lato host anziché utilizzare file binari di test il dispositivo di destinazione. Per abilitare il riconoscimento del nome del servizio per questi test, puoi: utilizza i modelli lato host per eseguire più volte lo stesso script di test (simile al test con parametri gtest).

Supporto del runtime per i test lato host

Figura 2. Supporto del runtime del framework VTS per lato host test
di Gemini Advanced.
  • Lo script hal test specifica l'HAL di targeting o servizi nel test.
  • La hal_hidl_host_test (sottoclasse param_test) prende gli HAL di test registrati da script di test, identifica i nomi dei servizi corrispondenti per l'HAL di test, genera quindi combinazioni di nomi di servizio (per test multi-HAL) come test parametri. Fornisce anche un metodo getHalServiceName() che restituisce il nome del servizio corrispondente in base al parametro passato a lo scenario di test attuale.
  • La param_test supporta la logica per accettare un elenco di parametri ed eseguire tutte le degli scenari di test con ogni parametro. Ad esempio per ogni scenario di test genera N nuovi scenario di test con parametri (N = dimensione dei parametri), ciascuno con un .

Configura i test lato host sensibili al nome del servizio

Per configurare l'ambiente di test per i test che tengono conto del nome del servizio lato host:

  1. Specifica il servizio HAL di destinazione nello script per il test:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Richiama getHalServiceName() e passa il nome nell'inizio 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, consulta: VtsHalMediaOmxStoreV1_0HostTest.py.

Registra HAL di test

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

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

  • Controlli delle precondizioni. Prima di eseguire un test HAL, VTS può verifica che l'HAL di test sia disponibile sul dispositivo di destinazione e salta i test Se non lo è (fai riferimento a VTS verificabilità).
  • Misurazione della copertura. VTS supporta il codice cross-process la misurazione della copertura attraverso la conoscenza dei servizi HAL di test richiesti da misurare (ovvero per il flush della copertura per il processo di servizio hal).