يتيح نظام التشغيل Android 9 الحصول على اسم الخدمة لمثيل HAL معيّن استنادًا إلى الجهاز الذي يتم تشغيل اختبارات "مجموعة اختبارات المورّدين" (VTS) عليه. من خلال تشغيل اختبارات HAL في اختبارات VTS التي تكون على دراية باسم الخدمة، يمكن للمطوّرين تنفيذ اختبارات إضافات المورّدين وHAL المتعددة ومثيلات HAL المتعددة تلقائيًا في عمليات تشغيل اختبارات VTS على كلّ من الجانب المستهدف والجانب المضيف.
لمحة عن أسماء الخدمات
تسجِّل كل نسخة من خدمة 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 المسجّلة التي يوفّرها إطار عمل VTS
بالإضافة إلى ذلك، يقدّم إطار عمل VTS دعمًا لوقت التشغيل لما يلي:
- معالجة ثنائية الاختبار مسبقًا للحصول على جميع واجهات برمجة التطبيقات المسجَّلة للاختبار
- تحديد جميع نُسخ الخدمة التي تعمل والحصول على اسم الخدمة
لكل نسخة (يتم استرجاعها استنادًا إلى
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 للاختبار باستخدام ميزة التعرّف على اسم الخدمة. تكون حِزم HAL المسجَّلة للاختبار مفيدة أيضًا في ما يلي:
- عمليات التحقّق من الشروط الأساسية: قبل إجراء اختبار HAL، يمكن لخدمة VTS confirm تأكيد توفّر HAL للاختبار على الجهاز المستهدَف وتخطّي الاختبارات في حال عدم توفّره (راجِع VTS التحقّق من إمكانية الاختبار).
- قياس التغطية: تتيح أداة فحص الأداء التلقائي قياس تغطية الرمز المبرمَج على مستوى جميع العمليات من خلال المعرفة بخدمات HAL للاختبار التي تريد قياسها (أي تنظيف التغطية لعملية خدمة hal).