Pengujian HAL berbasis nama layanan

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

Tentang nama layanan

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

Di versi Android sebelumnya, developer yang menjalankan pengujian HAL VTS diwajibkan untuk menetapkan nama layanan yang benar untuk klien pengujian di getService() atau membiarkan nama kosong dan kembali ke nama layanan default. Kekurangan pendekatan ini meliputi:

  • Ketergantungan pada pengetahuan developer pengujian untuk menetapkan nama layanan yang benar.
  • Secara default, dibatasi untuk pengujian terhadap satu instance layanan.
  • Pemeliharaan nama layanan secara manual (yaitu karena nama di-hardcode, nama tersebut harus diperbarui secara manual jika nama layanan berubah.

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

  • Ekstensi HAL vendor. Misalnya, saat vendor memiliki implementasi HAL camera.provider yang berjalan di perangkat vendor dengan nama layanan yang disesuaikan, VTS dapat mengidentifikasi instance vendor dan menjalankan pengujian terhadapnya.
  • Beberapa instance HAL. Misalnya, saat HAL graphics.composer memiliki dua instance (satu dengan nama layanan "default" dan satu dengan nama layanan "vr"), VTS dapat mengidentifikasi kedua instance tersebut dan menjalankan pengujian terhadap masing-masing instance.
  • Pengujian multi-HAL. Digunakan saat menguji beberapa HAL dengan beberapa instance. Misalnya, saat menjalankan pengujian VTS yang memverifikasi cara HAL keymaster dan gatekeeper bekerja sama, VTS dapat menguji semua kombinasi instance layanan untuk HAL tersebut.

Pengujian sisi target

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

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

Selain itu, framework VTS menyediakan dukungan runtime untuk:

  • Memproses biner pengujian sebelumnya untuk mendapatkan semua HAL pengujian 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 pengujian HAL).
  • 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 mengetahui nama layanan

Untuk menyiapkan lingkungan pengujian Anda untuk pengujian yang mengetahui 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 meneruskan 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. Untuk mengaktifkan kesadaran nama layanan untuk pengujian ini, Anda dapat menggunakan template sisi host untuk menjalankan skrip pengujian yang sama beberapa kali terhadap parameter yang berbeda (mirip dengan pengujian berparameter gtest).

Dukungan runtime untuk pengujian sisi host

Gambar 2. Dukungan runtime framework VTS untuk pengujian sisi host
  • Skrip hal test menentukan layanan HAL penargetan dalam pengujian.
  • hal_hidl_host_test (subclass dari param_test) mengambil HAL pengujian terdaftar dari skrip pengujian, mengidentifikasi nama layanan yang sesuai untuk HAL pengujian, lalu menghasilkan kombinasi nama layanan (untuk pengujian multi-HAL) sebagai parameter pengujian. Contoh ini juga menyediakan metode getHalServiceName() yang menampilkan nama layanan terkait berdasarkan parameter yang diteruskan ke kasus pengujian saat ini.
  • Template param_test mendukung logika untuk menerima daftar parameter dan menjalankan semua kasus pengujian yang diberikan terhadap setiap parameter. Artinya, untuk setiap kasus pengujian, alat ini akan menghasilkan N kasus pengujian berparameter baru (N = ukuran parameter), masing-masing dengan parameter tertentu.

Menyiapkan pengujian sisi host yang mengetahui nama layanan

Untuk menyiapkan lingkungan pengujian Anda 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

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

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

  • Pemeriksaan prasyarat. Sebelum menjalankan pengujian HAL, VTS dapat mengonfirmasi bahwa HAL pengujian tersedia di perangkat target, dan melewati pengujian jika tidak (lihat pemeriksaan kemampuan pengujian VTS).
  • Pengukuran cakupan. VTS mendukung pengukuran cakupan kode lintas proses melalui pengetahuan tentang pengujian layanan HAL yang ingin diukur (yaitu untuk menghapus cakupan untuk proses layanan hal).