Pengujian HAL berbasis nama layanan

Android 9 menyertakan dukungan untuk mendapatkan layanan nama instance HAL tertentu berdasarkan perangkat tempat Vendor Test Suite Pengujian (VTS) sedang berjalan. Menjalankan pengujian VTS HAL yang mengenali nama layanan memungkinkan pengembang untuk mengotomatiskan pengujian ekstensi vendor, beberapa HAL, dan beberapa instance HAL pada pengujian VTS sisi target dan sisi host.

Tentang nama layanan

Setiap instance layanan HAL yang sedang berjalan mendaftarkan dirinya sendiri dengan nama layanan.

Di versi Android sebelumnya, pengembang yang menjalankan pengujian VTS HAL diperlukan untuk menetapkan nama layanan yang benar untuk klien uji coba getService() atau biarkan nama kosong dan kembalikan ke default nama layanan. Kekurangan dari pendekatan ini termasuk:

  • Mengandalkan pengetahuan developer pengujian untuk menetapkan layanan yang benar nama.
  • Terbatas untuk pengujian terhadap satu instance layanan secara default.
  • Pemeliharaan nama layanan secara manual (misalnya karena nama dikodekan keras, layanan tersebut harus diperbarui secara manual jika nama layanan berubah.

Di Android 9, developer bisa secara otomatis mendapatkan nama layanan untuk instance HAL tertentu berdasarkan perangkat yang sedang diuji. Keuntungan pendekatan ini mencakup dukungan untuk pengujian:

  • Ekstensi HAL Vendor. Misalnya, ketika suatu vendor memiliki implementasi HAL camera.provider yang berjalan pada perangkat vendor dengan nama layanan yang disesuaikan, VTS dapat mengidentifikasi {i>instance<i} vendor dan menjalankan pengujian terhadapnya.
  • Beberapa instance HAL. Misalnya, ketika graphics.composer HAL memiliki dua instance (satu dengan nama layanan "default" dan satu lagi dengan nama layanan "{i>VR"), VTS dapat mengidentifikasi kedua {i>instance<i} dan menjalankan pengujian terhadap masing-masing {i>database<i}.
  • Pengujian multi-HAL. Digunakan saat menguji beberapa HAL dengan Misalnya, saat menjalankan tes VTS yang memverifikasi cara {i>keymaster<i} dan {i>gatekeeper HAL<i} bekerja bersama, VTS dapat menguji semua kombinasi instance layanan untuk HAL tersebut.

Pengujian sisi target

Agar dapat mengaktifkan kesadaran nama layanan untuk pengujian sisi target, Android 9 menyertakan lingkungan pengujian yang dapat disesuaikan (VtsHalHidlTargetTestEnvBase) yang menyediakan antarmuka untuk:

  • Daftarkan HAL penargetan dalam pengujian.
  • Cantumkan semua HAL yang terdaftar.
  • Dapatkan nama layanan untuk HAL terdaftar yang disediakan oleh framework VTS.

Selain itu, framework VTS menyediakan dukungan runtime untuk:

  • Lakukan pra-pemrosesan biner pengujian untuk mendapatkan semua HAL pengujian yang terdaftar.
  • Mengidentifikasi semua instance layanan yang berjalan dan mendapatkan nama layanan untuk setiap instance (diambil berdasarkan vendor/manifest.xml).
  • Menghitung semua kombinasi instance (untuk mendukung beberapa HAL pengujian).
  • Membuat pengujian baru untuk setiap instance layanan (kombinasi).

Contoh:

Dukungan runtime untuk pengujian sisi target

Gambar 1. Dukungan runtime framework VTS untuk pengujian sisi target

Menyiapkan pengujian sisi target yang peka nama layanan

Untuk menyiapkan lingkungan pengujian bagi pengujian berbasis nama layanan sisi target:

  1. Tentukan testEnvironment berdasarkan VtsHalHidlTargetTestEnvBase dan daftarkan HAL pengujian:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Gunakan getServiceName() yang disediakan oleh lingkungan pengujian untuk lulus nama layanan:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Daftarkan lingkungan pengujian di main() dan 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();
    }

Untuk contoh tambahan, lihat VtsHalCameraProviderV2_4TargetTest.cpp.

Pengujian sisi host VTS

Pengujian sisi host VTS menjalankan skrip pengujian di sisi host, bukan biner pengujian di perangkat target. Agar dapat mengaktifkan kesadaran nama layanan untuk pengujian ini, Anda dapat gunakan template sisi host untuk menjalankan skrip pengujian yang sama beberapa kali parameter yang berbeda (mirip dengan ujian berparameter gtest).

Dukungan runtime untuk pengujian sisi host

Gambar 2. Dukungan runtime framework VTS untuk sisi host pengujian
  • Skrip pengujian hal menentukan HAL penargetan layanan dalam pengujian.
  • Tujuan hal_hidl_host_test (subclass param_test) mengambil HAL pengujian terdaftar dari skrip pengujian, mengidentifikasi nama layanan yang sesuai untuk HAL pengujian, membuat kombinasi nama layanan (untuk pengujian multi-HAL) sebagai parameter. Class ini juga menyediakan metode getHalServiceName() yang mengembalikan nama layanan yang sesuai sesuai dengan parameter yang diteruskan ke kasus pengujian saat ini.
  • Tujuan param_test template mendukung logika untuk menerima daftar parameter dan menjalankan semua parameter yang diberikan kasus pengujian terhadap setiap parameter. Misalnya untuk setiap kasus pengujian, metode ini menghasilkan N kasus uji berparameter (N = ukuran parameter), masing-masing .

Menyiapkan pengujian sisi host yang peka nama layanan

Guna menyiapkan lingkungan pengujian untuk pengujian berbasis nama layanan sisi host:

  1. Tentukan layanan HAL target dalam skrip pengujian:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Panggil getHalServiceName() dan teruskan nama ke init 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))
    

Untuk contoh tambahan, lihat VtsHalMediaOmxStoreV1_0HostTest.py.

Mendaftarkan HAL pengujian

Dalam versi Android sebelumnya, VTS mengidentifikasi HAL pengujian menggunakan <precondition-lshal> opsi dikonfigurasi di AndroidTest.xml. Pendekatan ini sulit dipertahankan (karena mengandalkan developer untuk mengonfigurasi pengujian dengan benar dan mengupdate konfigurasi yang sesuai) dan tidak akurat (karena hanya berisi paket serta info versi dan bukan info antarmuka).

Di Android 9, VTS mengidentifikasi HAL pengujian menggunakan kesadaran nama layanan. HAL pengujian yang terdaftar juga berguna untuk:

  • Pemeriksaan prasyarat. Sebelum menjalankan tes HAL, VTS dapat memastikan HAL pengujian tersedia pada perangkat target dan melewati pengujian jika tidak (lihat VTS pemeriksaan kemampuan pengujian).
  • Pengukuran cakupan. VTS mendukung kode lintas proses pengukuran cakupan melalui pengetahuan tentang pengujian layanan HAL yang diinginkan yang akan diukur (yakni menghapus cakupan untuk proses layanan hal).