Hizmet adını gözeten HAL testi

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:

Hedef tarafı testi için çalışma zamanı desteği

Şekil 1. Hedef taraf testi için VTS çerçevesi çalışma zamanı desteği
ziyaret edin.

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:

  1. testEnvironment tanımlayın VtsHalHidlTargetTestEnvBase ve test HAL'lerini kaydedin:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. 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.
  3. Test ortamını main() sistemine kaydedin ve 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();
    }

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)

Ana makine tarafı testi için çalışma zamanı desteği

Şekil 2. Ana makine tarafı için VTS çerçevesi çalışma zamanı desteği test
ziyaret edin.
  • 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ılabilecek getHalServiceName() 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:

  1. Test komut dosyasında hedef HAL hizmetini belirtin:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
    .
  2. 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)