اختبار HAL مع اسم الخدمة

يتيح نظام Android 9 الحصول على الخدمة اسم مثيل HAL معين استنادًا إلى الجهاز الذي تم عليه استخدام Vendor Test Suite (VTS) قيد التشغيل. تشغيل اختبارات VTS HAL التي تعرف اسم الخدمة للمطورين من أتمتة اختبار إضافات الموردين، والعديد من HALs، مثيلات HAL متعددة عند إجراء اختبار VTS لكلٍّ من الهدف والمضيف.

لمحة عن أسماء الخدمات

يتم تسجيل كل مثيل من خدمة HAL قيد التشغيل لنفسها باسم خدمة.

في الإصدارات السابقة من Android، كان المطوّرون الذين يجرون اختبارات VTS HAL قد تم مطلوب لضبط اسم الخدمة الصحيح لعميل الاختبار في getService() أو ترك الاسم فارغًا والعودة إلى القيمة التلقائية اسم الخدمة. وشملت عيوب هذا النهج ما يلي:

  • الاعتماد على معرفة مطوّر الاختبار لتحديد الخدمة الصحيحة الاسم.
  • يقتصر على الاختبار مقابل مثيل خدمة واحد تلقائيًا.
  • الصيانة اليدوية لأسماء الخدمات (أي لأن الأسماء غير قابلة للتغيير في البرنامج، يجب تعديلها يدويًا في حال تغيير اسم الخدمة.

في Android 9، يمكن للمطوّرين الحصول تلقائيًا على اسم الخدمة لمثيل معين من HAL بناءً على الجهاز قيد الاختبار. تشمل مزايا هذا المنهج دعم الاختبار:

  • إضافات HAL للمورّدين: على سبيل المثال، عندما يكون لدى البائع هو تنفيذ طبقة تجريد الأجهزة (HAL) للكاميرا من مقدم الخدمة الذي يتم تشغيله على أجهزة الموردين باستخدام اسم الخدمة المخصص، يمكن لـ VTS تحديد مثيل البائع وإجراء الاختبار ضده.
  • أمثلة HAL متعددة: على سبيل المثال، عندما يحتوي graphics.composer HAL على حالتين (أحدهما باسم الخدمة) "تلقائي" والآخر باسم الخدمة "vr")، يمكن لخدمة VTS تحديد كلتا المثيلات وإجراء الاختبار على كل واحد منهم.
  • اختبار متعدد المستويات (HAL): تُستخدم عند اختبار HALs متعددة مع أمثلة متعددة، على سبيل المثال، عند إجراء اختبار VTS الذي يتحقق من كيفية عمل مفتاح التشفير HAL معًا، ويمكن لخدمة VTS اختبار جميع المجموعات لمثيلات الخدمة لـ HALs هذه.

الاختبارات على الجانب المستهدف

لتعزيز الوعي باسم الخدمة للاختبار من جهة الهدف، يستخدم نظام Android 9 يتضمن بيئة اختبار قابلة للتخصيص (VtsHalHidlTargetTestEnvBase) توفّر واجهات من أجل:

  • التسجيل الذي يستهدف HAL في الاختبار.
  • أدرِج جميع HALs المسجّلة.
  • يمكنك الحصول على أسماء الخدمات الخاصة بسياسة HAL المسجّلة التي يوفّرها إطار عمل VTS.

بالإضافة إلى ذلك، يوفّر إطار عمل VTS بيئة التشغيل لما يلي:

  • تتم معالجة البرنامج الثنائي للاختبار مسبقًا للحصول على جميع HALs للاختبارات المسجَّلة.
  • تحديد جميع مثيلات الخدمة قيد التشغيل والحصول على اسم الخدمة كل مثيل (تم استرجاعه استنادًا إلى vendor/manifest.xml).
  • حساب جميع مجموعات المثيلات (لإتاحة التوافق مع طبقة تجريد الأجهزة (HAL) المتعددة الاختبار).
  • إنشاء اختبار جديد لكل مثيل خدمة (نسخة).

مثال:

إتاحة وقت التشغيل للاختبار من جهة الهدف

الشكل 1. دعم وقت تشغيل إطار عمل VTS للاختبار من جهة الهدف

إعداد الاختبارات من الجانب المستهدف حسب اسم الخدمة

لإعداد بيئة اختبار من أجل الاختبار مع مراعاة اسم الخدمة من جهة الهدف:

  1. تحديد testEnvironment استنادًا إلى VtsHalHidlTargetTestEnvBase والتسجيل في اختبار 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

اختبارات VTS من جهة المضيف

تقوم اختبارات VTS من جانب المضيف بتشغيل نصوص برمجية تجريبية من جانب المضيف بدلاً من البرامج الثنائية التجريبية على الجهاز المستهدف. لتفعيل ميزة التعرّف على اسم الخدمة لهذه الاختبارات، يمكنك استخدام نماذج من جهة المضيف لتشغيل النص البرمجي الاختباري نفسه عدّة مرات معلمات مختلفة (على غرار اختبار معلمة gtest).

إتاحة وقت التشغيل للاختبار من جهة المضيف

الشكل 2. دعم وقت تشغيل إطار عمل VTS من جهة المضيف الاختبار
  • يحدد النص البرمجي hal test محتوى HAL المستهدف. الخدمة(الخدمات) في الاختبار.
  • تشير رسالة الأشكال البيانية hal_hidl_host_test (الفئة الفرعية من param_test) تحصل على مستويات HALs للاختبار المسجّل من البرنامج النصي الاختباري، يحدد اسم(أسماء) الخدمة المقابلة لاختبار HAL، ثم إنشاء تركيبات اسم الخدمة (لاختبار HAL متعدد) كاختبار المعلَمات. ويوفر أيضًا طريقة 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

تسجيل اختبار HALs

في الإصدارات السابقة من Android، حددت VTS طبقة تجريد الأجهزة (HAL) للاختبار باستخدام تم ضبط خيار واحد (<precondition-lshal>) في AndroidTest.xml كان من الصعب الحفاظ على هذا النهج (لأنه إلى المطوّرين لضبط إعدادات الاختبار بشكل صحيح والتكوين وفقًا لذلك) وغير دقيقة (لأنها احتوت على حزمة ومعلومات الإصدار وليس معلومات الواجهة).

في نظام Android 9، تحدِّد أداة VTS طبقة تجريد الأجهزة (HAL) للاختبار باستخدام الوعي باسم الخدمة. تكون مستويات HALs للاختبار المسجّلة مفيدة أيضًا في ما يلي:

  • عمليات التحقّق من الشروط المسبَقة: قبل إجراء اختبار HAL، يمكن أن يكون VTS التأكّد من توفّر طبقة تجريد الأجهزة (HAL) الاختبارية على الجهاز المستهدف وتخطّي الاختبارات إذا لم يكن كذلك (يُرجى مراجعة VTS) التحقق من قابلية الاختبار).
  • قياس التغطية: يدعم VTS الرموز البرمجية المتقاطعة قياس التغطية من خلال المعرفة حول خدمات اختبار HAL التي يريدها المطلوب القياس (أي مسح التغطية لعملية نصف الخدمة).