يتيح نظام التشغيل Android 9 الحصول على اسم الخدمة لمثيل HAL معيّن استنادًا إلى الجهاز الذي يتم تشغيل اختبارات "مجموعة اختبارات المورّدين" (VTS) عليه. من خلال تشغيل اختبارات HAL في فحص الأداء التفاعلي (VTS) التي تكون على دراية باسم الخدمة، يمكن للمطوّرين تنفيذ اختبارات إضافات المورّدين وHAL المتعددة ومثيلات HAL المتعددة تلقائيًا في عمليات تشغيل فحص الأداء التفاعلي من جهة المستهدَف والمضيف.
لمحة عن أسماء الخدمات
تسجِّل كل نسخة من خدمة HAL التي تعمل نفسها باسم خدمة.
في الإصدارات السابقة من Android، كان على المطوّرين الذين يجرون اختبارات HAL في اختبارات VTS
ضبط اسم الخدمة الصحيح لعميل الاختبار في
getService()
أو ترك الاسم فارغًا والرجوع إلى اسم الخدمة default. تشمل سلبيات هذا النهج ما يلي:
- الاعتماد على معرفة المطوّر المسؤول عن الاختبار لضبط اسم الخدمة الصحيح
- يقتصر على الاختبار على مثيل خدمة واحد تلقائيًا.
- الصيانة اليدوية لأسماء الخدمات (مثلاً، لأن الأسماء غير قابلة للتغيير في البرنامج، لذا يجب تعديلها يدويًا في حال تغيير اسم الخدمة)
في Android 9، يمكن للمطوّرين الحصول تلقائيًا على اسم الخدمة لمثيل HAL معيّن استنادًا إلى الجهاز الذي يخضع للاختبار. تشمل مزايا هذا النهج دعم الاختبار:
- إضافات HAL الخاصة بالمورّدين على سبيل المثال، عندما يكون لدى المورّد تنفيذ لواجهة HAL لـ camera.provider يعمل على أجهزة المورّد باستخدام اسم خدمة مخصّص، يمكن لخدمة فحص الأجهزة والبرامج (VTS) تحديد مثيل المورّد وإجراء الفحص عليه.
- أمثلة HAL متعددة: على سبيل المثال، عندما يحتوي
graphics.composer
HAL على نسختَين (نسخة باسم الخدمة "default" ونسخة باسم الخدمة "vr")، يمكن لخدمة فحص الأداء (VTS) تحديد كلتا النُسخ وإجراء الاختبار على كلّ منهما. - اختبار HAL المتعدّد يُستخدَم عند اختبار واجهات برمجة تطبيقات HAL متعددة باستخدام نُسخ متعددة. على سبيل المثال، عند إجراء اختبار VTS الذي يتحقق من كيفية عمل HAL الخاص بخدمة إدارة المفاتيح وخدمة البواب، يمكن لاختبار VTS اختبار جميع مجموعات نُسخ الخدمة لهذه واجهات برمجة التطبيقات.
الاختبارات من جهة المستهدَف
لتفعيل ميزة التعرّف على اسم الخدمة للاختبار على الجانب المستهدف، يتضمّن Android
9 بيئة اختبار قابلة للتخصيص
(VtsHalHidlTargetTestEnvBase
)
توفّر واجهات لإجراء ما يلي:
- التسجيل الذي يستهدف HAL في الاختبار.
- أدرِج جميع HAL المسجَّلة.
- الحصول على أسماء الخدمات لأجهزة HAL المسجّلة التي يوفّرها إطار عمل VTS
بالإضافة إلى ذلك، يقدّم إطار عمل VTS دعمًا لوقت التشغيل لما يلي:
- تتم معالجة البرنامج الثنائي للاختبار مسبقًا للحصول على جميع HALs للاختبارات المسجَّلة.
- تحديد جميع نُسخ الخدمة التي تعمل والحصول على اسم الخدمة
لكل نسخة (يتم استرجاعها استنادًا إلى
vendor/manifest.xml
) - احتساب جميع مجموعات النماذج (للسماح باختبار HAL المتعدّد)
- إنشاء اختبار جديد لكل مثيل خدمة (تركيبة).
مثال:
إعداد الاختبارات من الجانب المستهدف حسب اسم الخدمة
لإعداد بيئة الاختبار لإجراء الاختبار المُدرك لاسم الخدمة من جهة الهدف:
- حدِّد
testEnvironment
استنادًا إلىVtsHalHidlTargetTestEnvBase
وسجِّل HALs الاختبارية:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- استخدِم
getServiceName()
المقدَّمة من بيئة الاختبار لتمرير اسم الخدمة:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- سجِّل بيئة الاختبار في
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).
- يحدِّد نص hal test خدمات HAL المستهدَفة في الاختبار.
- تأخذ
hal_hidl_host_test
(الفئة الفرعية منparam_test
) واجهة HAL للاختبار المسجَّلة من ملف اختبار النصي، وتحدِّد أسماء الخدمات المقابلة لواجهة HAL للاختبار، ثم تنشئ مجموعات أسماء الخدمات (لاختبار واجهات HAL متعددة) كمَعلمات للاختبار. وتوفّر أيضًا طريقةgetHalServiceName()
التي تُعرِض اسم الخدمة المقابل وفقًا للمَعلمة التي تم تمريرها إلى ملف اختبار الحالة الحالي. - يتيح نموذج param_test استخدام المنطق لقبول قائمة بالمعلَمات وتنفيذ جميع حالات الاختبار المحدّدة مقابل كل معلَمة. أي أنّه لكلّ حالة اختبار، يتمّ إنشاء N حالة اختبار جديدة تتضمّن مَعلمات (N = حجم المَعلمات)، ولكلّ حالة مَعلمة معيّنة.
إعداد اختبارات من جهة المضيف تكون على دراية باسم الخدمة
لإعداد بيئة الاختبار لإجراء الاختبار المدرك لاسم الخدمة من جهة المضيف:
- حدد خدمة HAL المستهدفة في النص البرمجي للاختبار:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- اتصل بـ
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) HAL للاختبار باستخدام خيار
<precondition-lshal>
الذي تم ضبطه في
AndroidTest.xml
. كان من الصعب الحفاظ على هذا النهج (لأنّه
كان يعتمد على المطوّرين لضبط الاختبار بشكلٍ صحيح وتعديل
الإعدادات وفقًا لذلك) وغير دقيق (لأنّه كان يتضمّن فقط معلومات الحزمة
والإصدار وليس معلومات الواجهة).
في Android 9، يحدِّد فحص سلامة النقل (VTS) HAL للاختبار باستخدام ميزة التعرّف على اسم الخدمة. تكون مستويات HALs للاختبار المسجّلة مفيدة أيضًا في ما يلي:
- عمليات التحقّق من الشروط المسبقة قبل إجراء اختبار HAL، يمكن أن يتأكّد VTS من توفُّره على الجهاز المستهدَف وتخطّي الاختبارات إذا لم يكن متاحًا (راجِع التحقّق من إمكانية اختبار VTS).
- قياس التغطية: تتيح أداة فحص الأداء التلقائي قياس تغطية الرمز المبرمَج على مستوى جميع العمليات من خلال معرفة خدمات HAL للاختبار التي تريد قياسها (أي تنظيف التغطية لعملية خدمة hal).