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:
Menyiapkan pengujian sisi target yang mengetahui nama layanan
Untuk menyiapkan lingkungan pengujian Anda untuk pengujian yang mengetahui 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 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).
- Skrip hal test menentukan layanan HAL penargetan dalam pengujian.
hal_hidl_host_test
(subclass dariparam_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 metodegetHalServiceName()
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:
- 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
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).