HAL-Testbarkeitsprüfung

Die Android 9 Vendor Test Suite (VTS) unterstützt eine Laufzeitmethode zum Verwenden der Gerätekonfiguration, um zu ermitteln, welche VTS-Tests für dieses Geräteziel übersprungen werden sollten.

Flexibilität bei VTS-Tests

Ab Android 8.0 sind VTS-Tests für alle Geräte erforderlich, die mit Android 8.0 und höher gestartet wurden. Allerdings gelten nicht alle VTS-Tests für alle Geräteziele. Zum Beispiel:

  • Wenn ein bestimmtes Gerät einen Test-HAL (zB IR) nicht unterstützt, muss VTS keine Tests für diesen HAL-Test gegen dieses Geräteziel durchführen.
  • Wenn mehrere Geräte dasselbe SoC und dasselbe Hersteller-Image verwenden, aber unterschiedliche Hardwarefunktionen aufweisen, muss VTS bestimmen, ob ein Test für ein bestimmtes Geräteziel ausgeführt oder übersprungen werden soll.

VTS-Testtypen

VTS umfasst die folgenden Testtypen:

  • Compliance - Tests die Kompatibilität zwischen Rahmen und Lieferanten Partitionen. Diese Tests müssen auf Geräten ausgeführt (und bestanden) werden, die mit Android 8.0 oder höher gestartet werden.
  • Non-Compliance - Tests helfen Lieferanten Produktqualität (Leistung / Fusseln etc.) zu verbessern. Diese Tests sind für Anbieter optional.

Ob ein Test ein Konformitätstest ist oder nicht, hängt davon ab, zu welchem ​​Plan er gehört. Tests , die mit laufen VTS Plan werden Conformancetests betrachtet.

Ermittlung unterstützter HALs

VTS kann die folgenden Dateien verwenden, um festzustellen, ob das Geräteziel eine bestimmte HAL unterstützt:

  • /system/compatibility_matrix.xml . Fordert die vom Framework erforderlichen HAL-Instanzen an. Beispiel:
    <hal format="hidl" optional="true">
        <name>android.hardware.vibrator</name>
        <version>1.0-1</version>
        <interface>
           <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    
    • Das optional Attribut gibt an, ob der HAL streng vom Framework erforderlich ist.
    • Die Datei kann mehrere Einträge für dieselbe HAL (mit demselben Namen) aber mit unterschiedlichen Versionen und Schnittstellen enthalten.
    • Die Datei kann mehrere enthält version Konfigurationen für denselben Eintrag, den Rahmen anzeigt , kann mit verschiedenen Versionen arbeiten.
    • version1.0-1 bedeutet , dass der Rahmen mit der niedrigsten Version arbeiten kann 1,0 und nicht eine Version höher als 1.1 erfordern.
  • Vorrichtung manifest.xml . Fordert die vom Anbieter bereitgestellten HAL-Instanzen an. Beispiel:
    <hal format="hidl">
        <name>android.hardware.vibrator</name>
        <transport>hwbinder</transport>
        <version>1.2</version>
        <interface>
            <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    
    • Die Datei kann mehrere Einträge für dieselbe HAL (mit demselben Namen) aber mit unterschiedlichen Versionen und Schnittstellen enthalten.
    • Wenn die Datei nur eine einzige enthält version Konfiguration für einen Eintrag, version1.2 Mittel unterstützt der Anbieter alle Versionen von 1.0 ~ 1.2.
  • lshal. Ein Werkzeug auf dem Gerät , das zeigt Laufzeitinformationen über die HAL - Dienste mit dem eingetragenen hwservicemanager . Beispiel:
    android.hardware.vibrator@1.0::IVibrator/default
    

    lshal zeigt auch alle vom HALS dass mit Pass - Through - Implementierungen (dh mit der entsprechenden -impl.so Datei auf dem Gerät). Beispiel:
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
    

Konformitätstests

Bei Konformitätstests verlässt sich VTS auf das Herstellermanifest, um alle vom Gerät bereitgestellten HAL-Instanzen zu bestimmen (und zu testen). Entscheidungsfluss:

Testability check for compliance

Abbildung 1. Testbarkeit Prüfung für VTS Conformancetests

Non-Compliance-Tests

Bei Nichteinhaltung Tests beruht VTS auf dem Anbieter manifest und lshal Ausgänge zu bestimmen (und Test) den experimentellen HALs nicht in der beanspruchten manifest.xml Datei. Entscheidungsfluss:

Testability check for non-compliance

Abbildung 2. Testbarkeit Prüfung für VTS Nicht-Konformitätstests

Auffinden des Anbietermanifests

VTS Kontrollen für die Verkäufer manifest.xml Datei in den folgenden Stellen in der folgenden Reihenfolge:

  1. /vendor/etc/vintf/manifest.xml + ODM manifest (If gleicher HAL ist an beiden Orten definiert, ODM manifest überschreibt die in ein /vendor/etc/vintf/manifest.xml )
  2. /vendor/etc/vintf/manifest.xml
  3. ODM manifest.xml Datei, geladen aus den folgenden Dateien in der folgenden Reihenfolge:
    1. /odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
    2. /odm/etc/vintf/manifest.xml
    3. /odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
    4. /odm/etc/manifest.xml
    5. /vendor/manifest.xml

VTS-Testbarkeits-Checker

Der vts_testibility_checker ist ein binäre mit VTS verpackt und von VTS Testrahmen zur Laufzeit verwendet , um zu bestimmen , ob ein gegebener Test HAL testbar ist oder nicht. Es basiert auf libvintf zu laden und analysiert die Anbieter Manifest - Datei und führt die Entscheidung im vorhergehenden Abschnitt beschrieben fließen.

Zur Nutzung vts_testability_check :

  • Für einen Compliance - Test:
    vts_testability_check -c -b <bitness>  <hal@version>
    
  • Für einen Nicht-Compliance - Test:
    vts_testability_check -b <bitness>  <hal@version>
    

Die Ausgabe von vts_testability_check verwendet das folgende JSON - Format:

{testable: <True/False> Instances: <list of instance names of HAL service>}

Ermitteln von aufgerufenen HALs

Um festzustellen , welche von VTS HALs Tests zugegriffen wird, sicherzustellen , dass jeder Test HAL die uses VtsHalHidlTargetTestEnvBase Vorlage die HAL (n) zugegriffen im Test zu registrieren. Das VTS-Testframework kann dann die registrierten HALs bei der Vorverarbeitung des Tests extrahieren.

Für Conformancetests, können Sie auch prüfen , /system/etc/vintf/manifest.xml . Wenn hier eine HAL definiert ist, sollte VTS sie testen. (Für die HAL Dienste vom System zur Verfügung gestellt (zB graphics.composer/vr ) wird der HALs in deklariert /system/manifest.xml .)