Android 9 menyertakan dukungan untuk mendapatkan layanan nama instance HAL tertentu berdasarkan perangkat tempat Vendor Test Suite Pengujian (VTS) sedang berjalan. Menjalankan pengujian VTS HAL yang mengenali nama layanan memungkinkan pengembang untuk mengotomatiskan pengujian ekstensi vendor, beberapa HAL, dan beberapa instance HAL pada kedua pengujian VTS sisi target dan sisi host.
Tentang nama layanan
Setiap instance layanan HAL yang sedang berjalan mendaftarkan dirinya sendiri dengan nama layanan.
Di versi Android sebelumnya, pengembang yang
menjalankan pengujian VTS HAL
diperlukan untuk menetapkan nama layanan yang benar untuk klien uji coba
getService()
atau biarkan nama kosong dan kembalikan ke default
nama layanan. Kekurangan dari pendekatan ini termasuk:
- Mengandalkan pengetahuan developer pengujian untuk menetapkan layanan yang benar nama.
- Terbatas untuk pengujian terhadap satu instance layanan secara default.
- Pemeliharaan nama layanan secara manual (misalnya karena nama dikodekan keras, layanan tersebut 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 sedang diuji. Keuntungan pendekatan ini mencakup dukungan untuk pengujian:
- Ekstensi HAL Vendor. Misalnya, ketika suatu vendor memiliki implementasi HAL camera.provider yang berjalan pada perangkat vendor dengan nama layanan yang disesuaikan, VTS dapat mengidentifikasi {i>instance<i} vendor dan menjalankan pengujian terhadapnya.
- Beberapa instance HAL. Misalnya, ketika
graphics.composer
HAL memiliki dua instance (satu dengan nama layanan "default" dan satu lagi dengan nama layanan "{i>VR"), VTS dapat mengidentifikasi kedua {i>instance<i} dan menjalankan pengujian terhadap masing-masing {i>database<i}. - Pengujian multi-HAL. Digunakan saat menguji beberapa HAL dengan Misalnya, saat menjalankan tes VTS yang memverifikasi cara {i>keymaster<i} dan {i>gatekeeper HAL<i} bekerja bersama, VTS dapat menguji semua kombinasi instance layanan untuk HAL tersebut.
Pengujian sisi target
Agar dapat mengaktifkan {i>service name awareness<i}
untuk pengujian sisi target, Android
9 menyertakan lingkungan pengujian yang dapat disesuaikan
(VtsHalHidlTargetTestEnvBase
)
yang menyediakan antarmuka untuk:
- Daftarkan HAL penargetan dalam pengujian.
- Cantumkan semua HAL yang terdaftar.
- Dapatkan nama layanan untuk HAL terdaftar yang disediakan oleh framework VTS.
Selain itu, framework VTS menyediakan dukungan runtime untuk:
- Lakukan pra-pemrosesan biner pengujian untuk mendapatkan semua HAL pengujian yang 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 HAL pengujian).
- Membuat pengujian baru untuk setiap instance layanan (kombinasi).
Contoh:
Menyiapkan pengujian sisi target yang peka nama layanan
Untuk menyiapkan lingkungan pengujian bagi pengujian berbasis 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 lulus 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. Agar dapat mengaktifkan kesadaran nama layanan untuk pengujian ini, Anda dapat gunakan template sisi host untuk menjalankan skrip pengujian yang sama beberapa kali parameter yang berbeda (mirip dengan ujian berparameter gtest).
- Skrip pengujian hal menentukan HAL penargetan layanan dalam pengujian.
- Tujuan
hal_hidl_host_test
(subclassparam_test
) mengambil HAL pengujian terdaftar dari skrip pengujian, mengidentifikasi nama layanan yang sesuai untuk HAL pengujian, membuat kombinasi nama layanan (untuk pengujian multi-HAL) sebagai parameter. Class ini juga menyediakan metodegetHalServiceName()
yang mengembalikan nama layanan yang sesuai sesuai dengan parameter yang diteruskan ke kasus pengujian saat ini. - Tujuan param_test template mendukung logika untuk menerima daftar parameter dan menjalankan semua parameter yang diberikan kasus pengujian terhadap setiap parameter. Misalnya untuk setiap kasus pengujian, metode ini menghasilkan N kasus uji berparameter (N = ukuran parameter), masing-masing .
Menyiapkan pengujian sisi host yang peka nama layanan
Guna menyiapkan lingkungan pengujian 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
Dalam versi Android sebelumnya, VTS mengidentifikasi HAL pengujian menggunakan
<precondition-lshal>
opsi dikonfigurasi di
AndroidTest.xml
. Pendekatan ini sulit dipertahankan (karena
mengandalkan developer untuk mengonfigurasi pengujian dengan benar dan mengupdate
konfigurasi yang sesuai) dan tidak akurat (karena hanya berisi paket
serta info versi dan bukan info antarmuka).
Di Android 9, VTS mengidentifikasi HAL pengujian menggunakan kesadaran nama layanan. HAL pengujian yang terdaftar juga berguna untuk:
- Pemeriksaan prasyarat. Sebelum menjalankan tes HAL, VTS dapat memastikan HAL pengujian tersedia pada perangkat target dan melewati pengujian jika tidak (lihat VTS pemeriksaan kemampuan pengujian).
- Pengukuran cakupan. VTS mendukung kode lintas proses pengukuran cakupan melalui pengetahuan tentang pengujian layanan HAL yang diinginkan yang akan diukur (yakni menghapus cakupan untuk proses layanan hal).