सेवा का नाम जागरूक एचएएल परीक्षण

एंड्रॉइड 9 में उस डिवाइस के आधार पर दिए गए एचएएल इंस्टेंस का सेवा नाम प्राप्त करने के लिए समर्थन शामिल है जिस पर वेंडर टेस्ट सूट (वीटीएस) परीक्षण चल रहे हैं। सेवा नाम से अवगत वीटीएस एचएएल परीक्षण चलाने से डेवलपर्स लक्ष्य- और होस्ट-साइड वीटीएस परीक्षण रन दोनों पर विक्रेता एक्सटेंशन, कई एचएएल और कई एचएएल उदाहरणों का परीक्षण स्वचालित करने में सक्षम हो जाते हैं।

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

चल रही एचएएल सेवा का प्रत्येक उदाहरण स्वयं को एक सेवा नाम के साथ पंजीकृत करता है।

एंड्रॉइड के पिछले संस्करणों में, वीटीएस एचएएल परीक्षण चलाने वाले डेवलपर्स को परीक्षण क्लाइंट के लिए getService() में सही सेवा नाम सेट करने या नाम को खाली छोड़ने और डिफ़ॉल्ट सेवा नाम पर वापस जाने की आवश्यकता थी। इस दृष्टिकोण के नुकसान में शामिल हैं:

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

एंड्रॉइड 9 में, डेवलपर्स परीक्षण के तहत डिवाइस के आधार पर किसी दिए गए एचएएल उदाहरण के लिए स्वचालित रूप से सेवा का नाम प्राप्त कर सकते हैं। इस दृष्टिकोण के लाभों में परीक्षण के लिए समर्थन शामिल है:

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

लक्ष्य-पक्ष परीक्षण

लक्ष्य-पक्ष परीक्षण के लिए सेवा नाम जागरूकता को सक्षम करने के लिए, एंड्रॉइड 9 में एक अनुकूलन योग्य परीक्षण वातावरण ( VtsHalHidlTargetTestEnvBase ) शामिल है जो इंटरफ़ेस प्रदान करता है:

  • परीक्षण में एचएएल को लक्षित करते हुए रजिस्टर करें।
  • सभी पंजीकृत एचएएल की सूची बनाएं।
  • वीटीएस फ्रेमवर्क द्वारा पंजीकृत एचएएल के लिए सेवा नाम प्राप्त करें।

इसके अलावा, वीटीएस ढांचा इसके लिए रनटाइम समर्थन प्रदान करता है:

  • सभी पंजीकृत परीक्षण एचएएल प्राप्त करने के लिए परीक्षण बाइनरी को प्री-प्रोसेस करना।
  • सभी चल रहे सेवा उदाहरणों की पहचान करना और प्रत्येक उदाहरण के लिए सेवा का नाम प्राप्त करना ( vendor/manifest.xml के आधार पर पुनर्प्राप्त)।
  • सभी उदाहरण संयोजनों की गणना (एकाधिक एचएएल परीक्षण का समर्थन करने के लिए)।
  • प्रत्येक सेवा उदाहरण (संयोजन) के लिए एक नया परीक्षण तैयार करना।

उदाहरण:

Runtime support for target-side testing

चित्र 1. लक्ष्य-पक्ष परीक्षण के लिए वीटीएस फ्रेमवर्क रनटाइम समर्थन

सेवा नाम जागरूक लक्ष्य-पक्ष परीक्षण सेट करें

लक्ष्य-पक्ष सेवा नाम जागरूक परीक्षण के लिए अपना परीक्षण वातावरण स्थापित करने के लिए:

  1. VtsHalHidlTargetTestEnvBase के आधार पर एक testEnvironment परिभाषित करें और परीक्षण HALs पंजीकृत करें:
    #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 पैरामीटरयुक्त परीक्षण के समान)।

Runtime support for host-side testing

चित्र 2. होस्ट-साइड परीक्षण के लिए वीटीएस फ्रेमवर्क रनटाइम समर्थन
  • एचएएल परीक्षण स्क्रिप्ट परीक्षण में लक्ष्यीकरण एचएएल सेवा(सेवाओं) को निर्दिष्ट करती है।
  • hal_hidl_host_test ( param_test का उपवर्ग) परीक्षण स्क्रिप्ट से पंजीकृत परीक्षण HAL(ओं) को लेता है, परीक्षण HAL के लिए संबंधित सेवा नाम की पहचान करता है, फिर परीक्षण पैरामीटर के रूप में सेवा नाम संयोजन (बहु-HAL परीक्षण के लिए) उत्पन्न करता है। यह एक विधि getHalServiceName() भी प्रदान करता है जो वर्तमान परीक्षण मामले में पारित पैरामीटर के अनुसार संबंधित सेवा नाम लौटाता है।
  • परम_टेस्ट टेम्प्लेट मापदंडों की एक सूची को स्वीकार करने और प्रत्येक पैरामीटर के खिलाफ सभी दिए गए परीक्षण मामलों को चलाने के लिए तर्क का समर्थन करता है। यानी प्रत्येक परीक्षण मामले के लिए यह एन नया पैरामीटरयुक्त परीक्षण मामला (एन = पैरामीटर का आकार) उत्पन्न करता है, प्रत्येक एक दिए गए पैरामीटर के साथ।

सेवा नाम जागरूक होस्ट-साइड परीक्षण सेट करें

होस्ट-साइड सेवा नाम जागरूक परीक्षण के लिए अपना परीक्षण वातावरण स्थापित करने के लिए:

  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 की पहचान की। इस दृष्टिकोण को बनाए रखना मुश्किल था (क्योंकि यह परीक्षण को ठीक से कॉन्फ़िगर करने और तदनुसार कॉन्फ़िगरेशन को अपडेट करने के लिए डेवलपर्स पर निर्भर था) और गलत था (क्योंकि इसमें केवल पैकेज और संस्करण की जानकारी थी और इंटरफ़ेस की जानकारी नहीं थी)।

एंड्रॉइड 9 में, वीटीएस सेवा नाम जागरूकता का उपयोग करके परीक्षण एचएएल की पहचान करता है। पंजीकृत परीक्षण एचएएल इसके लिए भी उपयोगी हैं:

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