Hizmet adı farkında HAL testi

Android 9, Vendor Test Suite (VTS) testlerinin çalıştığı cihaza bağlı olarak belirli bir HAL örneğinin hizmet adının alınmasına yönelik destek içerir. Hizmet adına duyarlı VTS HAL testlerinin çalıştırılması, geliştiricilerin hem hedef hem de ana bilgisayar tarafı VTS test çalıştırmalarında tedarikçi firma uzantılarını, birden çok HAL'yi ve birden çok HAL örneğini test etmesini otomatikleştirmesine olanak tanır.

Hizmet adları hakkında

Çalışan HAL hizmetinin her örneği kendisini bir hizmet adıyla kaydeder.

Android'in önceki sürümlerinde, VTS HAL testleri çalıştıran geliştiricilerin getService() 'de test istemcisi için doğru hizmet adını ayarlamaları veya adı boş bırakıp varsayılan hizmet adına geri dönmeleri gerekiyordu. Bu yaklaşımın dezavantajları şunları içeriyordu:

  • Doğru hizmet adını belirlemek için test geliştiricisinin bilgisine güvenmek.
  • Varsayılan olarak tek bir hizmet örneğine karşı yapılan testlerle sınırlıdır.
  • Hizmet adlarının manuel bakımı (örn. adlar sabit kodlu olduğundan, hizmet adı değişirse bunların manuel olarak güncellenmesi gerekir.

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 desteği yer alır:

  • Satıcı HAL uzantıları . Örneğin, bir satıcı, özelleştirilmiş hizmet adına sahip satıcı cihazlarında çalışan bir kamera. sağlayıcı HAL uygulamasına sahip olduğunda, VTS satıcı örneğini tanımlayabilir ve testi buna göre çalıştırabilir.
  • Çoklu HAL örnekleri Örneğin, graphics.composer HAL'nin iki örneği (biri "varsayılan" hizmet adı ve diğeri "vr" hizmet adı) olduğunda, VTS her iki örneği de tanımlayabilir ve testi bunların her birine karşı çalıştırabilir.
  • Çoklu HAL testi . Birden fazla HAL'yi birden çok örnekle test ederken kullanılır Örneğin, anahtar yöneticisi ve ağ denetleyicisi HAL'nin birlikte nasıl çalıştığını doğrulayan VTS testini çalıştırırken VTS, bu HAL'ler için tüm hizmet örnekleri kombinasyonlarını test edebilir.

Hedef tarafı testleri

Hedef taraf testi için hizmet adı farkındalığını etkinleştirmek amacıyla Android 9, aşağıdakilere arayüz sağlayan özelleştirilebilir bir test ortamı ( VtsHalHidlTargetTestEnvBase ) içerir:

  • Hedefleme HAL'lerini 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 dosyasının ön işlenmesi.
  • Çalışan tüm hizmet örneklerini belirleme ve her örnek için hizmet adını alma ( vendor/manifest.xml temel alınarak alınır).
  • Tüm örnek kombinasyonlarının hesaplanması (birden fazla HAL testini desteklemek için).
  • Her hizmet örneği (kombinasyon) için yeni bir test oluşturuluyor.

Örnek:

Runtime support for target-side testing

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

Hizmet adına duyarlı hedef tarafı testleri ayarlama

Test ortamınızı hedef taraftaki hizmet adına duyarlı testler için ayarlamak üzere:

  1. VtsHalHidlTargetTestEnvBase dayalı 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() 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 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();
    }

Ek örnekler için VtsHalCameraProviderV2_4TargetTest.cpp bakın.

VTS ana bilgisayar tarafı testleri

VTS ana bilgisayar tarafı testleri, hedef cihazdaki test ikili dosyaları yerine ana bilgisayar 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ı parametrelere karşı birden çok kez çalıştırmak için ana bilgisayar tarafı şablonlarını kullanabilirsiniz (gtest parametreli teste benzer).

Runtime support for host-side testing

Şekil 2. Ana bilgisayar tarafı testleri için VTS çerçevesi çalışma zamanı desteği
  • Hal test komut dosyası, testteki hedefleme HAL hizmetini/hizmetlerini belirtir.
  • hal_hidl_host_test ( param_test alt sınıfı), test komut dosyasından kayıtlı test HAL'lerini alır, test HAL'si için karşılık gelen hizmet adlarını tanımlar, ardından test parametreleri olarak hizmet adı kombinasyonları (çoklu HAL testi için) oluşturur. Ayrıca geçerli test senaryosuna iletilen parametreye göre karşılık gelen hizmet adını döndüren getHalServiceName() yöntemini de sağlar.
  • param_test şablonu, bir parametre listesini kabul etme ve verilen tüm test senaryolarını her parametreye karşı çalıştırma mantığını destekler. Yani her test durumu için, her biri belirli bir parametreye sahip olan N yeni parametreli test durumu (N = parametrelerin boyutu) üretir.

Hizmet adına duyarlı ana makine tarafı testleri ayarlama

Ana bilgisayar tarafı hizmet adı tanıma testi için test ortamınızı ayarlamak için:

  1. Test komut dosyasında hedef HAL hizmetini belirtin:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. getHalServiceName() öğesini çağırın ve adı init hal'e 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))
    

Ek örnekler için VtsHalMediaOmxStoreV1_0HostTest.py bakın.

Test HAL'lerini kaydedin

Android'in önceki sürümlerinde VTS, AndroidTest.xml dosyasında yapılandırılan <precondition-lshal> seçeneğini kullanarak test HAL'sini tanımladı. Bu yaklaşımın sürdürülmesi zordu (geliştiricilerin testi doğru şekilde yapılandırmasına ve yapılandırmayı buna göre güncellemesine bağlıydı) ve hatalıydı (arayüz bilgisini değil yalnızca paket ve sürüm bilgilerini içerdiği için).

Android 9'da VTS, hizmet adı farkındalığını kullanarak test HAL'sini tanımlar. Kayıtlı test HAL'leri aşağıdakiler için de faydalıdır:

  • Ön koşul kontrolleri . Bir HAL testi çalıştırmadan önce VTS, HAL testinin hedef cihazda mevcut olduğunu doğrulayabilir ve mevcut değilse testleri atlayabilir ( VTS test edilebilirlik kontrolüne bakın).
  • Kapsama ölçümü . VTS, ölçmek istediği HAL hizmetlerinin test edilmesine ilişkin bilgi aracılığıyla çapraz süreç kod kapsamı ölçümünü destekler (yani hal hizmeti süreci için kapsamı temizlemek).