يتضمّن Android 9 إمكانية الحصول على اسم خدمة مثيل HAL معيّن استنادًا إلى الجهاز الذي يتم عليه تشغيل اختبارات Vendor Test Suite (VTS). إنّ تشغيل اختبارات VTS HAL التي تراعي اسم الخدمة يتيح للمطوّرين أتمتة اختبار إضافات مورّد الأجهزة، ومكتبات HAL متعددة، و مثيلات HAL متعددة على كلٍّ من جهاز الاختبار والجهاز المضيف في عمليات تشغيل اختبارات VTS.
لمحة عن أسماء الخدمات
يسجّل كل مثيل من خدمة HAL قيد التشغيل نفسه باسم خدمة.
في الإصدارات السابقة من Android، كان على المطوّرين الذين يشغّلون اختبارات VTS HAL
ضبط اسم الخدمة الصحيح لعميل الاختبار في
getService() أو ترك الاسم فارغًا والرجوع إلى اسم الخدمة التلقائي. تضمّنت عيوب هذه الطريقة ما يلي:
- الاعتماد على معرفة مطوّر الاختبار لضبط اسم الخدمة الصحيح
- الاقتصار على الاختبار مقابل مثيل خدمة واحد تلقائيًا
- الصيانة اليدوية لأسماء الخدمات (أي بما أنّ الأسماء مبرمَجة، يجب تعديلها يدويًا إذا تغيّر اسم الخدمة)
في Android 9، يمكن للمطوّرين الحصول تلقائيًا على الـ اسم خدمة لمثيل HAL معيّن استنادًا إلى الجهاز قيد الاختبار. تتضمّن مزايا هذه الطريقة إمكانية اختبار ما يلي:
- إضافات مورّد الأجهزة HAL : على سبيل المثال، عندما يكون لدى مورّد الأجهزة تنفيذ لمكتبة camera.provider HAL يتم تشغيلها على أجهزة المورّد باسم خدمة مخصّص، يمكن لـ VTS تحديد مثيل المورّد وتشغيل الاختبار عليه.
- مثيلات HAL متعددة : على سبيل المثال، عندما يكون لـ
graphics.composerHAL مثيلان (أحدهما باسم الخدمة "تلقائي" والآخر باسم الخدمة "vr")، يمكن لـ VTS تحديد كلا المثيلَين و تشغيل الاختبار على كلٍّ منهما. - اختبارات HAL المتعددة : يتم استخدامها عند اختبار مكتبات HAL متعددة مع مثيلات متعددة. على سبيل المثال، عند تشغيل اختبار VTS الذي يتحقّق من كيفية عمل مكتبتَي KeyMint (المعروفة سابقًا باسم Keymaster) وGatekeeper HAL معًا، يمكن لـ VTS اختبار جميع مجموعات مثيلات الخدمة لهاتَين المكتبتَين.
الاختبارات على جهاز الاختبار
لإتاحة إمكانية مراعاة اسم الخدمة للاختبارات على جهاز الاختبار، يتضمّن Android
9 بيئة اختبار قابلة للتخصيص
(VtsHalHidlTargetTestEnvBase)
توفّر واجهات لإجراء ما يلي:
- تسجيل مكتبات HAL المستهدَفة في الاختبار
- إدراج جميع مكتبات HAL المسجَّلة
- الحصول على أسماء الخدمات لمكتبات HAL المسجَّلة التي يوفّرها إطار عمل VTS
بالإضافة إلى ذلك، يوفّر إطار عمل VTS إمكانية تشغيل ما يلي:
- المعالجة المسبقة لملف الاختبار الثنائي للحصول على جميع مكتبات HAL المسجَّلة للاختبار
- تحديد جميع مثيلات الخدمة قيد التشغيل والحصول على اسم الخدمة لكل مثيل (يتم استرداده استنادًا إلى
vendor/manifest.xml) - حساب جميع مجموعات المثيلات (لدعم اختبارات HAL المتعددة)
- إنشاء اختبار جديد لكل مثيل (مجموعة) من مثيلات الخدمة
مثال:
إعداد اختبارات على جهاز الاختبار تراعي اسم الخدمة
لإعداد بيئة الاختبار للاختبارات على جهاز الاختبار التي تراعي اسم الخدمة:
- حدِّد
testEnvironmentاستنادًا إلىVtsHalHidlTargetTestEnvBaseوسجِّل مكتبات HAL للاختبار:#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 المتعددة) كمعلّمات للاخت101} بار. يوفّر أيضًا طريقة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.
تسجيل مكتبات HAL للاختبار
في الإصدارات السابقة من Android، كان VTS يحدّد مكتبة HAL للاختبار باستخدام الخيار
<precondition-lshal> الذي تم ضبطه في
AndroidTest.xml. كانت هذه الطريقة صعبة الصيانة (لأنّها كانت تعتمد على المطوّرين لضبط الاختبار بشكلٍ صحيح وتعديل الإعدادات وفقًا لذلك) وغير دقيقة (لأنّها كانت تحتوي على معلومات الحزمة والإصدار فقط وليس معلومات الواجهة).
في Android 9، يحدّد VTS مكتبة HAL للاختبار باستخدام إمكانية مراعاة اسم الخدمة. تفيد مكتبات HAL المسجَّلة للاختبار أيضًا في ما يلي:
- عمليات التحقّق من الشروط المسبقة : قبل تشغيل اختبار HAL، يمكن لـ VTS التأكّد من توفُّر مكتبة HAL للاختبار على جهاز الاختبار وتخطّي الاختبارات إذا لم تكن متوفّرة (يُرجى الرجوع إلى التحقّق من إمكانية اختبار VTS).
- قياس التغطية : يتيح VTS قياس تغطية الرمز البرمجي بين العمليات من خلال معرفة خدمات HAL للاختبار التي يريد قياسها (أي لإزالة التغطية من عملية خدمة HAL).