Pemeriksaan testabilitas 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 tes VTS

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

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

Jenis tes VTS

VTS mencakup jenis tes berikut:

  • Uji kepatuhan memastikan kompatibilitas antara kerangka kerja dan partisi vendor. Pengujian ini harus dijalankan (dan lulus) pada perangkat yang menjalankan Android 8.0 atau lebih tinggi.
  • Uji ketidakpatuhan membantu vendor meningkatkan kualitas produk (kinerja/fuzzing, dll.). Tes ini bersifat opsional untuk vendor.

Apakah suatu pengujian merupakan pengujian kepatuhan atau tidak bergantung pada rencana mana pengujian tersebut dilakukan. Pengujian yang dijalankan dengan paket VTS dianggap sebagai pengujian kepatuhan.

Tentukan HAL yang didukung

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

  • /system/compatibility_matrix.xml . Klaim instans HAL yang diperlukan oleh kerangka kerja. 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 benar-benar diwajibkan oleh kerangka kerja.
    • File tersebut mungkin berisi beberapa entri untuk HAL yang sama (dengan nama yang sama) tetapi dengan versi dan antarmuka yang berbeda.
    • File tersebut mungkin berisi beberapa konfigurasi version untuk entri yang sama, yang menunjukkan bahwa kerangka kerja dapat bekerja dengan versi yang berbeda.
    • version1.0-1 berarti framework dapat bekerja dengan versi terendah 1.0, dan tidak memerlukan versi yang lebih tinggi dari 1.1.
  • Manifes manifest.xml . Klaim instans 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 tersebut mungkin berisi beberapa entri untuk HAL yang sama (dengan nama yang sama) tetapi dengan versi dan antarmuka yang berbeda.
    • Jika file hanya berisi konfigurasi version tunggal untuk sebuah entri, version1.2 berarti vendor mendukung semua versi dari 1.0~1.2.
  • lshal . Alat pada perangkat yang menampilkan info runtime tentang layanan HAL yang terdaftar di hwservicemanager . Contoh:
    android.hardware.vibrator@1.0::IVibrator/default
    

    lshal juga menunjukkan semua HAL dengan implementasi passthrough (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/)
    

Tes kepatuhan

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

Testability check for compliance

Gambar 1. Pemeriksaan kemampuan uji untuk uji kepatuhan VTS

Tes ketidakpatuhan

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

Testability check for noncompliance

Gambar 2. Pemeriksaan kemampuan pengujian untuk pengujian ketidakpatuhan VTS

Temukan manifes vendor

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

  1. /vendor/etc/vintf/manifest.xml + manifes ODM (Jika HAL yang sama didefinisikan di kedua tempat, manifes ODM akan menggantikan yang ada di /vendor/etc/vintf/manifest.xml )
  2. /vendor/etc/vintf/manifest.xml
  3. File manifest.xml ODM, 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 testabilitas VTS

vts_testibility_checker adalah biner yang dikemas dengan VTS dan digunakan oleh kerangka 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 dan mengimplementasikan aliran keputusan yang dijelaskan di bagian sebelumnya.

Untuk menggunakan vts_testability_check :

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

Output dari vts_testability_check menggunakan format json berikut:

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

Tentukan HAL yang diakses

Untuk menentukan HAL mana yang diakses oleh pengujian VTS, pastikan bahwa setiap pengujian HAL menggunakan templat VtsHalHidlTargetTestEnvBase untuk mendaftarkan HAL yang diakses dalam pengujian. Kerangka pengujian VTS kemudian dapat mengekstrak HAL yang terdaftar saat melakukan pra-pemrosesan pengujian.

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