Android 9, hizmeti edinmeye yönelik destek içerir Tedarikçi Test Paketi'nin kullanıldığı cihaza göre belirli bir HAL örneğinin adı (VTS) testleri çalışıyor. Hizmet adının farkında olan VTS HAL testleri çalıştırma geliştiricilerin tedarikçi firma uzantılarını, birden fazla HAL’yi ve hem hedef hem de ana makine tarafı VTS test çalıştırmalarında birden fazla HAL örneği.
Hizmet adları hakkında
Çalışan HAL hizmetinin her örneği kendini bir hizmet adıyla kaydeder.
Android'in önceki sürümlerinde, VTS HAL testlerini çalıştıran geliştiriciler
test istemcisi için doğru hizmet adını ayarlamanız gerekir.
getService()
veya adı boş bırakıp varsayılan değeri kullanın
hizmet adı. Bu yaklaşımın dezavantajları arasında şunlar yer alıyordu:
- Doğru hizmeti ayarlamak için test geliştiricisinin bilgisine güvenme dokunun.
- Varsayılan olarak tek bir hizmet örneğine karşı test yapmakla sınırlıdır.
- Hizmet adlarının manuel olarak korunması (ör. adların sabit kodlanmasından dolayı, hizmet adı değişirse manuel olarak güncellenmesi gerekir.
Android 9'da geliştiriciler hizmet adı olarak kullanabilirsiniz. Bu yaklaşımın avantajları arasında test desteği de yer alır:
- Tedarikçi firma HAL uzantıları. Örneğin tedarikçinin tedarikçinin cihazlarında çalışan Camera.provider HAL uygulamasının VTS, tedarikçi örneğini tanımlayıp testi çalıştırabilir. çıkar.
- Birden çok HAL örneği. Örneğin,
graphics.composer
HAL'nin iki örneği vardır (biri hizmet adıyla birlikte) "varsayılan" hizmet adı "vr") ise VTS, hem örnekleri hem de her birinde test gerçekleştirin. - Çoklu HAL testi. Birden fazla HAL test edilirken kullanılır. birden fazla örnek varsa Örneğin, doğrulama işlemini tekrarlayan keymaster ve destekleyici HAL'si birlikte çalıştığında, VTS tüm kombinasyonları test edebilir hizmet örneğine denk gelir.
Hedef taraf testleri
Hedef taraf testi için hizmet adı bilinirliğini etkinleştirmek amacıyla Android
9, özelleştirilebilir bir test ortamı içerir
(VtsHalHidlTargetTestEnvBase
)
Şuna arayüz sağlayan:
- Hedef HAL'leri teste kaydedin.
- Kayıtlı tüm HAL'leri listeleyin.
- VTS çerçevesi tarafından sağlanan kayıtlı HAL'ler için hizmet adlarını alın.
Ayrıca VTS çerçevesi aşağıdakiler için çalışma zamanı desteği sağlar:
- Kayıtlı tüm test HAL'lerini almak için test ikili programını önceden işleyin.
- Tüm çalışan hizmet örneklerini tanımlama ve bu örnekler için hizmet adını alma
her örnek (
vendor/manifest.xml
temelinde alınır). - Tüm örnek kombinasyonlarını hesaplama (birden fazla HAL desteği sağlamak için) test).
- Her hizmet örneği için yeni test oluşturma (kombinasyon).
Örnek:
Hizmet adına duyarlı hedef tarafı testleri oluşturma
Test ortamınızı hedef taraf hizmet adına duyarlı testlere yönelik olarak ayarlamak için:
testEnvironment
tanımlayınVtsHalHidlTargetTestEnvBase
ve test HAL'lerini kaydedin:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Sınavı geçmek için test ortamı tarafından sağlanan
getServiceName()
kullan hizmet adı:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Test ortamını
main()
sistemine kaydedin veinitTest
:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
Daha fazla örnek için
VtsHalCameraProviderV2_4TargetTest.cpp
VTS ana makine tarafı testleri
VTS ana makine tarafı testleri, hedef cihaz. Bu testler için hizmet adı bilinirliğini etkinleştirmek amacıyla: aynı test komut dosyasını birden çok kez çalıştırmak için ana makine tarafı şablonları kullanın farklı parametreler (gtest parametreleştirilmiş teste benzer)
- hal test komut dosyası, hedefleme HAL'sini belirtir hizmet(ler)i seçin.
- İlgili içeriği oluşturmak için kullanılan
hal_hidl_host_test
. (param_test
alt sınıfı), kayıtlı test HAL'lerini test komut dosyası, test HAL'si için ilgili hizmet adlarını tanımlar, test olarak hizmet adı kombinasyonları (çoklu HAL testi için) oluşturur parametreleridir. Ayrıca, kullanılabilecekgetHalServiceName()
daima hazır olursunuz. - İlgili içeriği oluşturmak için kullanılan param_test şablon, parametre listesini kabul etme ve verilen tüm parametreleri çalıştırma mantığını destekler. her parametreye göre test durumu gösterir. Örneğin, her test durumu için N yeni değer oluşturur parametreli test durumu (N = parametrelerin boyutu), parametresinden sonra bir değer girin.
Hizmet adına duyarlı ana makine tarafı testleri oluşturma
Test ortamınızı ana makine tarafı hizmet adına duyarlı testlere yönelik olarak ayarlamak için:
- Test komut dosyasında hedef HAL hizmetini belirtin:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
. getHalServiceName()
numaralı telefonu arayın ve başlangıç işlemine adı iletin: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))
Daha fazla örnek için
VtsHalMediaOmxStoreV1_0HostTest.py
Test HAL'lerini kaydetme
VTS, Android'in önceki sürümlerinde
<precondition-lshal>
seçeneği şurada yapılandırıldı:
AndroidTest.xml
. Bu yaklaşımı sürdürmek zordu (çünkü
testin doğru şekilde yapılandırılması ve güncellenmesi için geliştiricilere
yapılandırma nedeniyle) ve yanlış (çünkü yalnızca paketin içindeki
ve sürüm bilgilerini kullanabilirsiniz).
Android 9'da VTS, test HAL'sini aşağıdakileri kullanarak tanımlar: hizmet adı bilinirliği. Kayıtlı test HAL'leri aşağıdakiler için de yararlıdır:
- Ön koşul kontrolleri. VTS, HAL testi yapmadan önce Test HAL'sinin hedef cihazda bulunduğunu onaylayın ve testleri atlayın uygun değilse (bkz. VTS test edilebilirlik kontrolü) kaldırın.
- Kapsam ölçümü. VTS, işlemler arası kodu destekler test amaçlı HAL hizmetleri hakkındaki bilgi birikimi aracılığıyla kapsam ölçümü (ör. hal hizmet sürecinin kapsamını netleştirmek için)