Nama Layanan Aware Pengujian HAL

Android 9 menyertakan dukungan untuk mendapatkan nama layanan dari 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 uji coba VTS sisi target dan host.

Tentang nama layanan

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

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

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

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

  • Ekstensi HAL vendor . Misalnya, ketika vendor memiliki implementasi camera.provider HAL 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 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 keymaster dan gatekeeper HAL 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 HAL penargetan dalam pengujian.
  • Daftar semua HAL yang terdaftar.
  • Dapatkan nama layanan untuk HAL terdaftar yang disediakan oleh kerangka kerja VTS.

Selain itu, kerangka kerja VTS menyediakan dukungan runtime untuk:

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

Contoh:

Runtime support for target-side testing

Gambar 1. Dukungan runtime framework VTS untuk pengujian sisi target

Menyiapkan tes sisi target yang sadar nama layanan

Untuk menyiapkan lingkungan pengujian Anda untuk pengujian sadar nama layanan sisi target:

  1. Tentukan testEnvironment berdasarkan VtsHalHidlTargetTestEnvBase dan daftarkan HAL pengujian: l10n
    #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 : l10n
    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 biner pengujian pada 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 parameter gtest).

Runtime support for host-side testing

Gambar 2. Dukungan runtime framework VTS untuk pengujian sisi host
  • Skrip pengujian hal 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 pengujian HAL, kemudian menghasilkan kombinasi nama layanan (untuk pengujian multi-HAL) sebagai parameter pengujian. Ini juga menyediakan metode getHalServiceName() yang mengembalikan nama layanan yang sesuai sesuai dengan parameter yang diteruskan ke kasus pengujian saat ini.
  • Template param_test mendukung logika untuk menerima daftar parameter dan menjalankan semua kasus uji yang diberikan terhadap setiap parameter. Yaitu untuk setiap kasus uji menghasilkan N kasus uji parameter baru (N = ukuran parameter), masing-masing dengan parameter yang diberikan.

Menyiapkan tes 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 .

Mendaftarkan tes HAL

Di versi Android sebelumnya, VTS mengidentifikasi pengujian HAL menggunakan opsi <precondition-lshal> yang dikonfigurasi di AndroidTest.xml . Pendekatan ini sulit untuk dipertahankan (karena mengandalkan 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 tes HAL, VTS dapat mengonfirmasi bahwa pengujian HAL tersedia pada perangkat target dan melewatkan tes jika tidak (lihat pemeriksaan testability VTS ).
  • Pengukuran cakupan . VTS mendukung pengukuran cakupan kode lintas proses melalui pengetahuan tentang layanan pengujian HAL yang ingin diukur (yaitu untuk menyiram cakupan untuk proses layanan hal).