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 target dan host yang menjalankan pengujian VTS.
Tentang nama layanan
Setiap instance layanan HAL yang berjalan mendaftarkan dirinya dengan nama layanan.
Pada versi Android sebelumnya, developer yang menjalankan pengujian HAL VTS
diwajibkan untuk menyetel nama layanan yang benar untuk klien pengujian di
getService()
atau membiarkan nama kosong dan melakukan penggantian ke nama layanan
default. Kekurangan pendekatan ini meliputi:
- Mengandalkan pengetahuan developer pengujian untuk menetapkan nama layanan yang benar.
- Secara default, terbatas untuk pengujian terhadap satu instance layanan.
- Pemeliharaan nama layanan secara manual (yaitu karena nama di-hardcode, nama 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 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 kerja HAL KeyMint (sebelumnya Keymaster) dan Gatekeeper bersama-sama, VTS dapat menguji semua kombinasi instance layanan untuk HAL tersebut.
Pengujian sisi target
Untuk mengaktifkan pengenalan nama layanan untuk pengujian sisi target, Android
9 menyertakan lingkungan pengujian yang dapat disesuaikan
(VtsHalHidlTargetTestEnvBase
)
yang menyediakan antarmuka ke:
- Daftarkan penargetan HAL 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 terlebih dahulu untuk mendapatkan semua HAL pengujian terdaftar.
- Mengidentifikasi semua instance layanan yang sedang berjalan dan mendapatkan nama layanan untuk
setiap instance (diambil berdasarkan
vendor/manifest.xml
). - Menghitung semua kombinasi instance (untuk mendukung pengujian HAL ganda).
- Membuat pengujian baru untuk setiap instance (kombinasi) layanan.
Contoh:
Menyiapkan pengujian sisi target yang mendukung nama layanan
Untuk menyiapkan lingkungan pengujian Anda untuk pengujian yang mendukung nama layanan sisi target:
- Tentukan
testEnvironment
berdasarkanVtsHalHidlTargetTestEnvBase
dan daftarkan HAL pengujian:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- 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.
- Daftarkan lingkungan pengujian di
main()
daninitTest
: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 pengenalan nama layanan untuk pengujian ini, Anda dapat menggunakan template sisi host untuk menjalankan skrip pengujian yang sama beberapa kali dengan parameter yang berbeda (mirip dengan pengujian berparameter gtest).
- Skrip hal test menentukan layanan HAL penargetan dalam pengujian.
-
hal_hidl_host_test
(subkelasparam_test
) mengambil HAL pengujian terdaftar dari skrip pengujian, mengidentifikasi nama layanan yang sesuai untuk HAL pengujian, lalu membuat kombinasi nama layanan (untuk pengujian multi-HAL) sebagai parameter pengujian. Contoh ini juga menyediakan metodegetHalServiceName()
yang menampilkan nama layanan yang sesuai 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, N kasus pengujian berparameter baru akan dibuat (N = ukuran parameter), masing-masing dengan parameter tertentu.
Menyiapkan pengujian sisi host yang mendukung nama layanan
Untuk menyiapkan lingkungan pengujian Anda untuk pengujian yang mendukung nama layanan sisi host:
- Tentukan layanan HAL target dalam skrip pengujian:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- 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
Pada 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 yang sesuai) dan tidak akurat (karena hanya berisi info paket dan versi, bukan info antarmuka).
Di Android 9, VTS mengidentifikasi HAL pengujian menggunakan pengenalan 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 tersedia (lihat pemeriksaan kemampuan pengujian VTS).
- Pengukuran cakupan. VTS mendukung pengukuran cakupan kode lintas proses melalui pengetahuan tentang layanan HAL pengujian yang ingin diukur (yaitu untuk menghapus cakupan proses layanan HAL).