Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

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.

Dalam versi sebelumnya dari Android, pengembang menjalankan tes VTS HAL diminta untuk menetapkan nama layanan yang benar untuk klien tes di getService() atau meninggalkan nama kosong dan fallback untuk nama layanan default. Kerugian dari pendekatan ini termasuk:

  • Ketergantungan pada pengetahuan pengembang pengujian untuk menetapkan nama layanan yang benar.
  • Terbatas untuk pengujian terhadap satu instance layanan secara default.
  • Pemeliharaan manual nama layanan (yaitu karena nama dikodekan secara keras, mereka 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 diuji. Keuntungan dari pendekatan ini termasuk dukungan untuk pengujian:

  • Ekstensi penjual HAL. 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. Sebagai contoh, ketika graphics.composer HAL memiliki dua contoh (satu dengan nama layanan "default" dan satu dengan nama layanan "vr"), VTS dapat mengidentifikasi kedua kasus dan menjalankan uji terhadap masing-masing.
  • 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 layanan nama kesadaran untuk pengujian sasaran-side, Android 9 termasuk lingkungan tes 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 contoh layanan yang berjalan dan mendapatkan nama layanan untuk setiap contoh (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. VTS dukungan kerangka runtime untuk pengujian sasaran-side

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 mendaftar HAL uji:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Gunakan getServiceName() yang disediakan oleh lingkungan tes untuk lulus nama layanan:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Daftar 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 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. VTS dukungan kerangka runtime untuk pengujian host-sisi
  • HAL tes script menspesifikasikan penargetan layanan HAL (s) dalam ujian.
  • The hal_hidl_host_test (subclass dari param_test ) mengambil terdaftar pengujian HAL (s) dari script tes, mengidentifikasi nama layanan yang sesuai (s) untuk HAL pengujian, kemudian menghasilkan kombinasi nama layanan (untuk multi-HAL pengujian) sebagai parameter uji. Hal ini juga menyediakan metode getHalServiceName() yang mengembalikan nama layanan yang sesuai sesuai dengan parameter dilewatkan ke ujian saat ini.
  • The param_test mendukung Template 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 sadar nama layanan

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

  1. Tentukan target pelayanan HAL dalam script tes:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Panggilan getHalServiceName() dan lulus nama ke Hal init:
    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

Dalam versi sebelumnya dari Android, VTS mengidentifikasi menguji HAL menggunakan <precondition-lshal> option dikonfigurasi dalam AndroidTest.xml . Pendekatan ini sulit 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:

  • Cek prasyarat. Sebelum menjalankan tes HAL, VTS dapat mengkonfirmasi pengujian HAL tersedia pada perangkat target dan melewatkan tes jika tidak (lihat VTS testability cek ).
  • Cakupan pengukuran. VTS mendukung pengukuran cakupan kode lintas proses melalui pengetahuan tentang pengujian layanan HAL yang ingin diukur (yaitu untuk menyiram cakupan untuk proses layanan hal).