सेवा के नाम की जानकारी एचएएल टेस्टिंग के लिए

Android 9 में, किसी डिवाइस पर वेंडर टेस्ट सुइट (वीटीएस) टेस्ट के आधार पर, किसी दिए गए एचएएल इंस्टेंस की सेवा का नाम पाने की सुविधा शामिल है. सेवा के नाम के बारे में जानकारी रखने वाले VTS HAL टेस्ट चलाने पर, डेवलपर को टारगेट- और होस्ट-साइड, दोनों पर VTS टेस्ट के रन में, वेंडर एक्सटेंशन, कई HAL, और कई HAL इंस्टेंस की जांच अपने-आप करने की सुविधा मिलती है.

सेवा के नामों के बारे में जानकारी

चल रही HAL सेवा का हर इंस्टेंस, सेवा के नाम के साथ खुद को रजिस्टर करता है.

Android के पिछले वर्शन में, VTS HAL टेस्ट चलाने वाले डेवलपर को getService() में, टेस्ट क्लाइंट के लिए सेवा का सही नाम सेट करना होता था. इसके अलावा, नाम खाली छोड़कर, सेवा के डिफ़ॉल्ट नाम पर फ़ॉलबैक किया जा सकता था. इस तरीके के नुकसानों में ये शामिल हैं:

  • सेवा का सही नाम सेट करने के लिए, जांच करने वाले डेवलपर के ज्ञान पर भरोसा करना.
  • डिफ़ॉल्ट रूप से, सिर्फ़ एक सेवा इंस्टेंस के लिए टेस्टिंग की सुविधा.
  • सेवा के नामों को मैन्युअल तरीके से मैनेज करना.इसका मतलब है कि नाम हार्ड कोड किए गए होते हैं. इसलिए, अगर सेवा का नाम बदलता है, तो उन्हें मैन्युअल तरीके से अपडेट करना होगा.

Android 9 में, डेवलपर को किसी दिए गए एचएएल इंस्टेंस के लिए, जांचे जा रहे डिवाइस के आधार पर, सेवा का नाम अपने-आप मिल सकता है. इस तरीके के फ़ायदों में टेस्टिंग के लिए सहायता शामिल है:

  • वेंडर एचएएल एक्सटेंशन. उदाहरण के लिए, जब किसी वेंडर ने camera.provider HAL को लागू किया हो और वह वेंडर डिवाइसों पर, पसंद के मुताबिक सेवा के नाम के साथ काम करता हो, तो VTS वेंडर इंस्टेंस की पहचान कर सकता है और उस पर जांच कर सकता है.
  • एचएएल के एक से ज़्यादा इंस्टेंस. उदाहरण के लिए, जब graphics.composer एचएएल में दो इंस्टेंस होते हैं (एक का सेवा नाम "डिफ़ॉल्ट" और दूसरा सेवा नाम "वीआर" है), तो वीटीएस दोनों इंस्टेंस की पहचान कर सकता है और हर एक के लिए जांच कर सकता है.
  • मल्टी-एचएएल टेस्टिंग. इसका इस्तेमाल, एक से ज़्यादा इंस्टेंस वाले कई एचएएल की जांच करने के लिए किया जाता है. उदाहरण के लिए, VTS टेस्ट चलाते समय, यह पुष्टि की जाती है कि एचएएल के साथ-साथ, कीमास्टर और गेटकीपर एचएएल कैसे काम करते हैं. इस दौरान, VTS उन एचएएल के लिए सेवा इंस्टेंस के सभी कॉम्बिनेशन की जांच कर सकता है.

टारगेट-साइड टेस्ट

टारगेट-साइड टेस्टिंग के लिए, सेवा के नाम की जानकारी देने की सुविधा चालू करने के लिए, Android 9 में पसंद के मुताबिक बनाया जा सकने वाला टेस्टिंग एनवायरमेंट (VtsHalHidlTargetTestEnvBase) शामिल है. यह एनवायरमेंट, इन इंटरफ़ेस को उपलब्ध कराता है:

  • टेस्ट में टारगेटिंग एचएएल(एचएएल) रजिस्टर करें.
  • रजिस्टर किए गए सभी एचएएल की सूची बनाएं.
  • VTS फ़्रेमवर्क की मदद से, रजिस्टर किए गए एचएएल के लिए सेवा का नाम पाएं.

इसके अलावा, VTS फ़्रेमवर्क, रनटाइम के लिए इनकी सहायता करता है:

  • रजिस्टर किए गए सभी टेस्ट एचएएल(HAL) पाने के लिए, टेस्ट बाइनरी को पहले से प्रोसेस करना.
  • चल रही सभी सेवा के इंस्टेंस की पहचान करना और हर इंस्टेंस के लिए सेवा का नाम पाना (vendor/manifest.xml के आधार पर वापस पाया गया).
  • सभी इंस्टेंस कॉम्बिनेशन की गिनती करना (एक से ज़्यादा एचएएल की जांच के लिए).
  • हर सेवा के इंस्टेंस (कॉम्बिनेशन) के लिए नया टेस्ट जनरेट करना.

उदाहरण:

टारगेट-साइड टेस्टिंग के लिए रनटाइम सहायता

पहली इमेज. टारगेट-साइड टेस्टिंग के लिए, VTS फ़्रेमवर्क का रनटाइम सहायता

सेवा के नाम के बारे में जानकारी रखने वाले टारगेट-साइड टेस्ट सेट अप करना

टारगेट साइड की सेवा के नाम के बारे में जानकारी देने वाली टेस्टिंग के लिए, अपना टेस्टिंग एनवायरमेंट सेट अप करने के लिए:

  1. VtsHalHidlTargetTestEnvBase के आधार पर testEnvironment तय करें और टेस्ट एचएएल रजिस्टर करें:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. सेवा का नाम पास करने के लिए, टेस्ट एनवायरमेंट से मिले getServiceName() का इस्तेमाल करें:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. टेस्ट एनवायरमेंट को main() और 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();
    }

अन्य उदाहरणों के लिए, VtsHalCameraProviderV2_4TargetTest.cpp देखें.

वीटीएस के होस्ट-साइड टेस्ट

वीटीएस के होस्ट-साइड टेस्ट, टारगेट डिवाइस पर टेस्ट बाइनरी के बजाय, होस्ट साइड पर टेस्ट स्क्रिप्ट चलाते हैं. इन टेस्ट के लिए, सेवा के नाम की जानकारी देने की सुविधा चालू करने के लिए, होस्ट साइड टेंप्लेट का इस्तेमाल किया जा सकता है. इससे, एक ही टेस्ट स्क्रिप्ट को अलग-अलग पैरामीटर के लिए कई बार चलाया जा सकता है. यह gtest पैरामीटर वाले टेस्ट जैसा ही है.

होस्ट-साइड टेस्टिंग के लिए रनटाइम सहायता

दूसरी इमेज. होस्ट-साइड टेस्टिंग के लिए, VTS फ़्रेमवर्क के रनटाइम की सहायता
  • hal test स्क्रिप्ट, टेस्ट में टारगेटिंग HAL सेवाओं के बारे में बताती है.
  • hal_hidl_host_test (param_test का सबक्लास), टेस्ट स्क्रिप्ट से रजिस्टर किए गए टेस्टिंग एचएएल को लेता है. साथ ही, टेस्टिंग एचएएल के लिए उससे जुड़ी सेवा के नाम की पहचान करता है. इसके बाद, टेस्टिंग पैरामीटर के तौर पर, कई एचएएल की टेस्टिंग के लिए सेवा के नाम के कॉम्बिनेशन जनरेट करता है. इसमें एक तरीका getHalServiceName() भी दिया गया है, जो मौजूदा टेस्ट केस में पास किए गए पैरामीटर के हिसाब से, उससे जुड़ी सेवा का नाम दिखाता है.
  • param_test टेंप्लेट, पैरामीटर की सूची स्वीकार करने और हर पैरामीटर के लिए दिए गए सभी टेस्ट केस चलाने के लिए लॉजिक का इस्तेमाल करता है. इसका मतलब है कि हर टेस्ट केस के लिए, यह N नए पैरामीटर वाले टेस्ट केस जनरेट करता है (N = पैरामीटर का साइज़). हर टेस्ट केस में एक दिया गया पैरामीटर होता है.

सेवा के नाम के बारे में जानकारी रखने वाले होस्ट-साइड टेस्ट सेट अप करना

होस्ट-साइड सेवा के नाम के बारे में जानकारी देने वाली टेस्टिंग के लिए, अपना टेस्टिंग एनवायरमेंट सेट अप करने के लिए:

  1. टेस्ट स्क्रिप्ट में टारगेट एचएएल सेवा के बारे में बताएं:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
  2. getHalServiceName() को कॉल करें और नाम को 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))

अन्य उदाहरणों के लिए, VtsHalMediaOmxStoreV1_0HostTest.py देखें.

टेस्ट एचएएल रजिस्टर करना

Android के पिछले वर्शन में, VTS ने AndroidTest.xml में कॉन्फ़िगर किए गए <precondition-lshal> विकल्प का इस्तेमाल करके, टेस्टिंग एचएएल की पहचान की थी. इस तरीके को बनाए रखना मुश्किल था, क्योंकि टेस्ट को सही तरीके से कॉन्फ़िगर करने और कॉन्फ़िगरेशन को अपडेट करने के लिए, यह डेवलपर पर निर्भर था. साथ ही, यह सटीक भी नहीं था, क्योंकि इसमें सिर्फ़ पैकेज और वर्शन की जानकारी थी, इंटरफ़ेस की जानकारी नहीं.

Android 9 में, VTS, सेवा के नाम की जानकारी का इस्तेमाल करके, टेस्टिंग एचएएल की पहचान करता है. रजिस्टर किए गए टेस्टिंग एचएएल इन कामों के लिए भी काम के होते हैं:

  • पहले से तय की गई शर्तों की जांच. एचएएल टेस्ट चलाने से पहले, VTS यह पुष्टि कर सकता है कि टारगेट डिवाइस पर टेस्टिंग एचएएल उपलब्ध है या नहीं. अगर यह उपलब्ध नहीं है, तो टेस्ट को छोड़ा जा सकता है. ज़्यादा जानकारी के लिए, VTS की जांच की जा सकती है देखें.
  • कवरेज मेज़रमेंट. VTS, टेस्टिंग एचएएल सेवाओं के बारे में जानकारी के ज़रिए, क्रॉस-प्रोसेस कोड कवरेज मेज़रमेंट की सुविधा देता है. यह जानकारी, उन सेवाओं को मेज़र करने के लिए ज़रूरी है (जैसे, एचएएल सेवा प्रोसेस के लिए कवरेज को फ़्लश करना).