Pengujian HAL yang mengetahui nama layanan

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

Tentang nama layanan

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

Pada versi Android sebelumnya, pengembang yang menjalankan pengujian VTS HAL diharuskan menyetel nama layanan yang benar untuk klien pengujian di getService() atau membiarkan nama tersebut kosong dan melakukan fallback ke nama layanan default. Kerugian dari pendekatan ini meliputi:

  • Ketergantungan pada pengetahuan pengembang pengujian untuk menetapkan nama layanan yang benar.
  • Terbatas pada pengujian terhadap satu instans layanan secara default.
  • Pemeliharaan nama layanan secara manual (yaitu karena nama bersifat hard-coded, nama layanan harus diperbarui secara manual jika nama layanan berubah.

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

  • Ekstensi vendor HAL . Misalnya, ketika vendor memiliki implementasi HAL camera.provider yang berjalan pada perangkat vendor dengan nama layanan yang disesuaikan, VTS dapat mengidentifikasi instance vendor dan menjalankan pengujian terhadapnya.
  • Beberapa contoh HAL . Misalnya, ketika HAL graphics.composer memiliki dua instance (satu dengan nama layanan "default" dan satu lagi dengan nama layanan "vr"), VTS dapat mengidentifikasi kedua instance 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 bagaimana HAL keymaster dan gatekeeper bekerja bersama, VTS dapat menguji semua kombinasi instance layanan untuk HAL tersebut.

Tes sisi target

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

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

Selain itu, kerangka VTS menyediakan dukungan runtime untuk:

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

Contoh:

Runtime support for target-side testing

Gambar 1. Dukungan runtime kerangka VTS untuk pengujian sisi target

Siapkan pengujian sisi target yang mengetahui nama layanan

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

Tes sisi host VTS

Pengujian sisi host VTS menjalankan skrip pengujian di sisi host, bukan binari pengujian pada perangkat target. Untuk mengaktifkan kesadaran nama layanan untuk pengujian ini, Anda dapat menggunakan templat sisi host untuk menjalankan skrip pengujian yang sama beberapa kali terhadap parameter yang berbeda (mirip dengan pengujian berparameter gtest).

Runtime support for host-side testing

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

Siapkan pengujian sisi host yang mengetahui nama layanan

Untuk menyiapkan lingkungan pengujian Anda untuk pengujian sadar 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 berikan 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 .

Daftarkan HAL tes

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

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

  • Pemeriksaan prasyarat . Sebelum menjalankan pengujian HAL, VTS dapat mengonfirmasi bahwa HAL pengujian tersedia pada perangkat target dan melewatkan pengujian jika tidak tersedia (lihat Pemeriksaan testabilitas VTS ).
  • Pengukuran cakupan . VTS mendukung pengukuran cakupan kode lintas-proses melalui pengetahuan tentang pengujian layanan HAL yang ingin diukur (yaitu untuk menghilangkan cakupan untuk proses layanan hal).