Hizmet adını gözeten HAL testi

Android 9, Satıcı Testi Paketi (VTS) testlerinin çalıştırıldığı cihaza göre belirli bir HAL örneğinin hizmet adını alma desteği içerir. Hizmet adı bilincine sahip VTS HAL testleri çalıştırmak, geliştiricilerin hem hedef hem de ana makine tarafında VTS test çalıştırmalarında tedarikçi uzantılarını, birden fazla HAL'i ve birden fazla HAL örneğini test etmeyi otomatikleştirmesini sağlar.

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 bakımı (ör. adlar sabit kodlandığından, hizmet adı değişirse manuel olarak güncellenmelidir.

Android 9'da geliştiriciler, test edilen cihaza göre belirli bir HAL örneğinin hizmet adını otomatik olarak alabilir. Bu yaklaşımın avantajları arasında test için destek 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'i birden fazla örnekle test ederken kullanılır. Örneğin, anahtar yöneticisi ve kapı bekçisi HAL'inin birlikte nasıl çalıştığını doğrulayan VTS testi çalıştırıldığında VTS, bu HAL'ler için tüm hizmet örneği kombinasyonlarını test edebilir.

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:

  • Teste hedefleme HAL'lerini 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.
  • Çalışan tüm hizmet örneklerini tanımlama ve her bir örneğin hizmet adını alma (vendor/manifest.xml'ye göre alınır).
  • Tüm örnek kombinasyonlarını hesaplama (birden fazla HAL testini desteklemek için).
  • Her hizmet örneği (kombinasyon) için yeni bir test oluşturma.

Örnek:

Hedef taraflı test için çalışma zamanı desteği

Şekil 1. Hedef taraflı test için VTS çerçevesi çalışma zamanı desteği

Hizmet adına duyarlı hedef tarafı testleri oluşturma

Test ortamınızı hedef tarafında hizmet adı bilinçli test için ayarlamak üzere:

  1. VtsHalHidlTargetTestEnvBase temel alınarak bir testEnvironment tanımlayın ve test HAL'lerini kaydedin:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Hizmet adını iletmek için test ortamı tarafından sağlanan getServiceName() öğesini kullanın:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Test ortamını main() ve initTest'e kaydedin:
    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ında testler

VTS ana makine taraflı testleri, hedef cihazdaki test ikili dosyaları yerine ana makine tarafında test komut dosyalarını çalıştırır. Bu testler için hizmet adı farkındalığını etkinleştirmek amacıyla, aynı test komut dosyasını farklı parametrelerle birden çok kez çalıştırmak için ana makine tarafı şablonlarını kullanabilirsiniz (gtest parametreli testine benzer).

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

Şekil 2. Ana makine tarafı için VTS çerçevesi çalışma zamanı desteği test
  • hal test komut dosyası, hedefleme HAL'sini belirtir hizmet(ler)i seçin.
  • hal_hidl_host_test sınıfı (param_test alt sınıfı), test komut dosyasından kayıtlı test HAL'lerini alır, test HAL'si için ilgili hizmet adlarını tanımlar ve ardından test parametreleri olarak hizmet adı kombinasyonları (çoklu HAL testi için) oluşturur. Ayrıca, kullanılabilecek getHalServiceName() daima hazır olursunuz.
  • param_test şablonu, bir parametre listesini kabul etme ve verilen tüm test durumlarını her parametre için çalıştırma mantığını destekler. Yani her test senaryosu için N yeni parametreli test senaryosu (N = parametrelerin boyutu) oluşturur.

Hizmet adı bilinçli 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

Android'in önceki sürümlerinde VTS, AndroidTest.xml bölümünde yapılandırılmış <precondition-lshal> seçeneğini kullanarak test HAL'ini tanımladı. 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)