Die Android 9-Anbietertestsuite (VTS) unterstützt eine Laufzeitmethode, mit der anhand der Gerätekonfiguration ermittelt werden kann, welche VTS-Tests für das jeweilige Geräteziel übersprungen werden sollen.
VTS-Testflexibilität
Ab Android 8.0 sind VTS-Tests für alle Geräte erforderlich, die mit Android 8.0 oder höher auf den Markt gebracht werden. Nicht alle VTS-Tests gelten jedoch für alle Geräteziele. Beispiel:
- Wenn ein bestimmtes Gerät einen Test-HAL (z.B. IR) nicht unterstützt, muss VTS für diesen HAL-Test keine Tests für dieses Geräteziel ausführen.
- Wenn mehrere Geräte dasselbe SoC und dasselbe Anbieter-Image haben, aber unterschiedliche Hardwarefunktionen, muss VTS ermitteln, ob ein Test für ein bestimmtes Geräteziel ausgeführt oder übersprungen werden soll.
VTS-Testtypen
VTS umfasst die folgenden Testtypen:
- Compliance-Tests stellen die Kompatibilität zwischen Framework- und Anbieterpartitionen sicher. Diese Tests müssen auf Geräten mit Android 8.0 oder höher ausgeführt und bestanden werden.
- Nicht konforme Tests helfen Anbietern, die Produktqualität zu verbessern (Leistung/Fuzzing usw.). Diese Tests sind für Anbieter optional.
Ob ein Test ein Compliancetest ist, hängt davon ab, zu welchem Tarif er gehört. Tests, die mit dem VTS-Plan ausgeführt werden, gelten als Compliancetests.
Unterstützte HALs ermitteln
VTS kann anhand der folgenden Dateien feststellen, ob das Geräteziel eine bestimmte HAL unterstützt:
/system/compatibility_matrix.xml
. Er 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 Attribut
optional
gibt an, ob die HAL vom Framework unbedingt erforderlich ist. - Die Datei kann mehrere Einträge für dieselbe HAL (mit demselben Namen) mit unterschiedlicher Version und unterschiedlichen Schnittstellen enthalten.
- Die Datei kann mehrere
version
-Konfigurationen für denselben Eintrag enthalten, was darauf hinweist, dass das Framework mit verschiedenen Versionen funktionieren kann. version1.0-1
bedeutet, dass das Framework mit der niedrigsten Version 1.0 arbeiten kann und keine höhere Version als 1.1 erfordert.
- Das Attribut
- Gerät „
manifest.xml
“. Erklärt Anspruch auf die vom Anbieter bereitgestellten HAL-Instanzen. 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) mit unterschiedlicher Version und unterschiedlichen Schnittstellen enthalten.
- Wenn die Datei nur eine einzige
version
-Konfiguration für einen Eintrag enthält, bedeutetversion1.2
, dass der Anbieter alle Versionen von 1.0 bis 1.2 unterstützt.
- lshal Ein Tool auf dem Gerät, das Laufzeitinformationen zu den HAL-Diensten enthält, die bei
hwservicemanager
registriert sind. Beispiel:android.hardware.vibrator@1.0::IVibrator/default
lshal
zeigt auch alle HALs mit Passthrough-Implementierungen an (d. h. 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/)
Compliance tests
Bei Compliance-Tests verwendet VTS das Anbietermanifest, um alle vom Gerät bereitgestellten HAL-Instanzen zu ermitteln und zu testen. Entscheidungsfluss:
Richtlinienverstöße
Bei Nichteinhaltungstests verwendet VTS das Anbietermanifest und die lshal
-Ausgaben, um die experimentellen HALs zu ermitteln und zu testen, die in der manifest.xml
-Datei nicht angegeben wurden. Entscheidungsfluss:
Anbietermanifest finden
VTS sucht in der folgenden Reihenfolge an den folgenden Stellen nach der manifest.xml
-Datei des Anbieters:
/vendor/etc/vintf/manifest.xml
+ ODM-Manifest (Wenn derselbe HAL an beiden Stellen definiert ist, überschreibt das ODM-Manifest den in/vendor/etc/vintf/manifest.xml
)/vendor/etc/vintf/manifest.xml
- ODM-
manifest.xml
-Datei, die in der folgenden Reihenfolge aus den folgenden Dateien geladen wird:/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
VTS-Testbarkeitsprüfung
vts_testibility_checker
ist ein Binärprogramm, das mit VTS verpackt ist und vom VTS-Test-Framework zur Laufzeit verwendet wird, um festzustellen, ob ein bestimmter HAL-Test testbar ist oder nicht. Es basiert auf libvintf
, um die Manifestdatei des Anbieters zu laden und zu parsen, und implementiert den im vorherigen Abschnitt beschriebenen Entscheidungsablauf.
Gehe so vor, wenn du vts_testability_check
verwenden möchtest:
- Für einen Compliance-Test:
vts_testability_check -c -b <bitness> <hal@version>
- Bei einem Verstoßtest:
vts_testability_check -b <bitness> <hal@version>
Die Ausgabe von vts_testability_check
hat das folgende JSON-Format:
{testable: <True/False> Instances: <list of instance names of HAL service>}
Zugegriffene HALs ermitteln
Um zu ermitteln, auf welche HALs in VTS-Tests zugegriffen wird, muss für jeden HAL-Test die VtsHalHidlTargetTestEnvBase
-Vorlage verwendet werden, um die HALs zu registrieren, auf die im Test zugegriffen wird. Das VTS-Testframework kann dann die registrierten HALs bei der Vorverarbeitung des Tests extrahieren.
Für Compliancetests können Sie auch /system/etc/vintf/manifest.xml
prüfen. Wenn hier ein HAL definiert ist, sollte VTS ihn testen. Für die vom System bereitgestellten HAL-Dienste (z.B. graphics.composer/vr
) werden die HALs in /system/manifest.xml
deklariert.