सेवा के नाम के बारे में जानकारी रखने वाले एचएएल की जांच

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

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

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

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

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

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

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

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

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

  • टेस्ट में, एचएएल को टारगेट करने के लिए रजिस्टर करें.
  • रजिस्टर किए गए सभी एचएएल की सूची बनाएं.
  • वीटीएस फ़्रेमवर्क की ओर से उपलब्ध कराए गए रजिस्टर किए गए HAL के लिए, सेवा का नाम पाएं.

इसके अलावा, वीटीएस फ़्रेमवर्क, रनटाइम के दौरान इन सुविधाओं के लिए सहायता देता है:

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

उदाहरण:

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

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

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

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

  1. testEnvironment को VtsHalHidlTargetTestEnvBase के आधार पर तय करें और टेस्ट एचएएल रजिस्टर करें:
    #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 देखें.

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

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

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

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

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

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

  1. टेस्ट स्क्रिप्ट में, टारगेट HAL सेवा के बारे में बताएं:
    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> विकल्प का इस्तेमाल करके, टेस्टिंग HAL की पहचान करता था. इस तरीके को बनाए रखना मुश्किल था, क्योंकि इसमें डेवलपर पर यह ज़िम्मेदारी थी कि वे टेस्ट को सही तरीके से कॉन्फ़िगर करें और कॉन्फ़िगरेशन को उसके हिसाब से अपडेट करें. साथ ही, यह तरीका सटीक नहीं था, क्योंकि इसमें सिर्फ़ पैकेज और वर्शन की जानकारी शामिल होती थी, न कि इंटरफ़ेस की जानकारी.

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

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