Pemeriksaan kemampuan pengujian HAL

Vendor Test Suite (VTS) Android 9 mendukung metode runtime untuk menggunakan konfigurasi perangkat guna mengidentifikasi pengujian VTS mana yang harus dilewati untuk target perangkat tersebut.

Fleksibilitas pengujian VTS

Mulai Android 8.0, pengujian VTS diperlukan untuk semua perangkat yang diluncurkan dengan Android 8.0 dan yang lebih tinggi. Namun, tidak semua pengujian VTS berlaku untuk semua target perangkat. Contoh:

  • Jika perangkat tertentu tidak mendukung HAL pengujian (misalnya, IR), VTS tidak perlu menjalankan pengujian HAL tersebut terhadap target perangkat tersebut.
  • Jika beberapa perangkat menggunakan SoC dan image vendor yang sama, tetapi memiliki fungsi hardware yang berbeda, VTS harus menentukan apakah pengujian harus dijalankan atau dilewati untuk target perangkat tertentu.

Jenis pengujian VTS

VTS mencakup jenis pengujian berikut:

  • Pengujian kepatuhan memastikan kompatibilitas antara framework dan partisi vendor. Pengujian ini harus dijalankan (dan lulus) di perangkat yang diluncurkan dengan Android 8.0 atau yang lebih tinggi.
  • Pengujian ketidakpatuhan membantu vendor meningkatkan kualitas produk (performa/fuzzing, dll.). Pengujian ini bersifat opsional bagi vendor.

Apakah pengujian merupakan pengujian kepatuhan atau tidak bergantung pada paket yang dimilikinya. Pengujian yang dijalankan dengan rencana VTS dianggap sebagai pengujian kepatuhan.

Menentukan HAL yang didukung

VTS dapat menggunakan file berikut untuk menentukan apakah target perangkat mendukung HAL tertentu:

  • /system/compatibility_matrix.xml. Mengklaim instance HAL yang diperlukan oleh framework. Contoh:
    <hal format="hidl" optional="true">
        <name>android.hardware.vibrator</name>
        <version>1.0-1</version>
        <interface>
           <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • Atribut optional menunjukkan apakah HAL sangat diperlukan oleh framework.
    • File dapat berisi beberapa entri untuk HAL yang sama (dengan nama yang sama) tetapi dengan versi dan antarmuka yang berbeda.
    • File dapat berisi beberapa konfigurasi version untuk entri yang sama, yang menunjukkan bahwa framework dapat berfungsi dengan versi yang berbeda.
    • version1.0-1 berarti framework dapat berfungsi dengan versi terendah 1.0, dan tidak memerlukan versi yang lebih tinggi dari 1.1.
  • Perangkat manifest.xml. Mengklaim instance HAL yang disediakan oleh vendor. Contoh:
    <hal format="hidl">
        <name>android.hardware.vibrator</name>
        <transport>hwbinder</transport>
        <version>1.2</version>
        <interface>
            <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    • File dapat berisi beberapa entri untuk HAL yang sama (dengan nama yang sama) tetapi dengan versi dan antarmuka yang berbeda.
    • Jika file hanya berisi satu konfigurasi version untuk entri, version1.2 berarti vendor mendukung semua versi dari 1.0~1.2.
  • lshal. Alat di perangkat yang menampilkan info runtime tentang layanan HAL yang terdaftar di hwservicemanager. Contoh:
    android.hardware.vibrator@1.0::IVibrator/default

    lshal juga menampilkan semua HAL dengan penerapan pass-through (yaitu memiliki file -impl.so yang sesuai di perangkat). Contoh:
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)

Uji kepatuhan

Untuk pengujian kepatuhan, VTS mengandalkan manifes vendor untuk menentukan (dan menguji) semua instance HAL yang disediakan oleh perangkat. Alur keputusan:

Pemeriksaan kemampuan pengujian untuk kepatuhan

Gambar 1. Pemeriksaan kemampuan pengujian untuk pengujian kepatuhan VTS

Uji ketidakpatuhan

Untuk pengujian ketidakpatuhan, VTS mengandalkan output lshal dan manifes vendor untuk menentukan (dan menguji) HAL eksperimental yang tidak diklaim dalam file manifest.xml. Alur keputusan:

Pemeriksaan kemampuan pengujian untuk ketidakpatuhan

Gambar 2. Pemeriksaan kemampuan pengujian untuk pengujian ketidakpatuhan VTS

Menemukan manifes vendor

VTS memeriksa file manifest.xml vendor di tempat berikut dalam urutan berikut:

  1. Manifes /vendor/etc/vintf/manifest.xml + ODM (Jika HAL yang sama ditentukan di kedua tempat, manifes ODM akan menggantikan manifes di /vendor/etc/vintf/manifest.xml)
  2. /vendor/etc/vintf/manifest.xml
  3. File ODM manifest.xml, dimuat dari file berikut dalam urutan berikut:
    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

Pemeriksa kemampuan pengujian VTS

vts_testibility_checker adalah biner yang dikemas dengan VTS dan digunakan oleh framework pengujian VTS saat runtime untuk menentukan apakah pengujian HAL tertentu dapat diuji atau tidak. Hal ini didasarkan pada libvintf untuk memuat dan mengurai file manifes vendor serta menerapkan alur keputusan yang dijelaskan di bagian sebelumnya.

Untuk menggunakan vts_testability_check:

  • Untuk pengujian kepatuhan:
    vts_testability_check -c -b <bitness>  <hal@version>
  • Untuk pengujian ketidakpatuhan:
    vts_testability_check -b <bitness>  <hal@version>

Output vts_testability_check menggunakan format json berikut:

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

Menentukan HAL yang diakses

Untuk menentukan HAL mana yang diakses oleh pengujian VTS, pastikan setiap pengujian HAL menggunakan template VtsHalHidlTargetTestEnvBase untuk mendaftarkan HAL yang diakses dalam pengujian. Framework pengujian VTS kemudian dapat mengekstrak HAL yang terdaftar saat memproses awal pengujian.

Untuk uji kepatuhan, Anda juga dapat memeriksa /system/etc/vintf/manifest.xml. Jika HAL ditentukan di sini, VTS harus mengujinya. (Untuk layanan HAL yang disediakan oleh sistem (misalnya, graphics.composer/vr), HAL dideklarasikan di /system/manifest.xml.)