منذ الإصدار 5.0 من نظام التشغيل Android، يتطلّب التشغيل السليم لمجموعة بروتوكولات الشبكة في Android على أنظمة Linux الأساسية عددًا من عمليات الإرسال التي تم إرسالها مؤخرًا نسبيًا أو لم يتم إرسالها بعد. وليس من السهل التحقّق يدويًا من وظائف النواة المطلوبة أو تتبُّع عمليات الدمج الناقصة، لذا يشارك فريق Android الاختبارات التي يستخدمها لضمان عمل النواة على النحو المتوقّع.
أسباب إجراء الاختبارات
تتوفّر هذه الاختبارات لثلاثة أسباب رئيسية:
- يختلف إصدار نواة Linux المستخدَم على الجهاز باختلاف الجهاز، ومن الصعب معرفة ما إذا كانت أي نواة تعمل بشكل سليم بدون إجراء الاختبارات.
- قد يؤدي نقل تصحيحات النواة إلى إصدارات مختلفة من النواة أو إلى أشجار أجهزة مختلفة إلى حدوث مشاكل دقيقة يصعب رصدها بدون إجراء الاختبارات.
- قد تتطلّب ميزات الشبكات الجديدة وظائف جديدة في النواة أو إصلاح أخطاء في النواة.
إذا لم تجتَز الاختبارات، سيتصرف حزمة بروتوكولات الشبكة في الجهاز بشكل غير صحيح، ما يؤدي إلى حدوث أخطاء في الاتصال يلاحظها المستخدمون (مثل عدم الاتصال بشبكات Wi-Fi). من المحتمل أيضًا ألّا يجتاز الجهاز اختبارات "مجموعة أدوات اختبار التوافق" (CTS) على Android.
استخدام الاختبارات
تستخدِم الاختبارات User-Mode Linux لتشغيل النواة كعملية على جهاز مضيف يعمل بنظام التشغيل Linux. يمكنك الاطّلاع على إنشاء بيئة إصدار لمعرفة إصدارات نظام التشغيل المناسبة. يُشغّل إطار عمل اختبار الوحدة النواة باستخدام صورة قرص مناسبة ويُجري الاختبارات من نظام الملفات المضيف. تتم كتابة الاختبارات بلغة Python وتستخدم واجهات TAP لتجربة سلوك النواة وواجهة برمجة التطبيقات الخاصة بالمقبس.
تجميع النواة لـ ARCH=um
لكي يتم تشغيل الاختبارات، يجب تجميع النواة لـ ARCH=um SUBARCH=x86_64. هذه بنية متوافقة مع كل من المصدر الرئيسي وشجرات نواة Android الشائعة (مثل android-4.4)، ولكن في بعض الأحيان، لا يتم تجميع نِوى الأجهزة في هذا الوضع لأنّ شجرات الأجهزة تحتوي على رمز خاص بالجهاز أو بالأجهزة في الملفات الشائعة (مثل sys/exit.c).
في كثير من الحالات، يكفي التأكّد من أنّ الرمز البرمجي الخاص بالأجهزة يقع خلف #ifdef. عادةً، يجب أن يكون هذا #ifdef في خيار إعداد يتحكّم في الميزة المحدّدة ذات الصلة بالرمز. إذا لم يتوفّر خيار إعدادات من هذا النوع، ضَع الرمز البرمجي الخاص بالأجهزة داخل حظر #ifndef CONFIG_UML.
بشكل عام، يجب أن يكون إصلاح هذه المشكلة من مسؤولية مقدّم شجرة النواة (مثل بائع مجموعة الشرائح أو نظام على شريحة). نعمل مع المصنّعين الأصليين للأجهزة والمورّدين لضمان إمكانية تجميع النواة الحالية والمستقبلية لنظام التشغيل ARCH=um
SUBARCH=x86_64 بدون الحاجة إلى إجراء أي تغييرات.
إجراء الاختبارات
تتوفّر الاختبارات على kernel/tests/net/test.
يُنصح بتشغيل الاختبارات من AOSP main لأنّها
الأكثر حداثة، وفي بعض الحالات، لا تتوفّر تغطية كاملة للاختبارات
في الإصدار المحدّد لميزات النواة الضرورية
للتشغيل السليم في إصدار Android معيّن. للحصول على معلومات حول كيفية إجراء الاختبارات، يُرجى الاطّلاع على ملف التعليمات الخاص باختبار شبكة النواة. بشكل أساسي، من أعلى شجرة النواة، شغِّل ما يلي:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
اجتياز الاختبارات
تحتوي ملفات المصدر الخاصة باختبار شبكة النواة في Python
على تعليقات تحدّد عمليات تثبيت النواة التي يُعرف أنّها
مطلوبة لاجتياز الاختبارات. يجب أن تجتاز الاختبارات أشجار النواة الشائعة، أي جميع فروع النواة الشائعة android-4.4 والإصدارات الأحدث، في مشروع kernel/common في "مشروع Android مفتوح المصدر" (AOSP). لذلك، فإنّ اجتياز الاختبارات على النواة هو ببساطة مسألة دمج مستمر من فرع النواة المشتركة ذي الصلة.
المساهمات
الإبلاغ عن المشاكل
يمكنك الإبلاغ عن أي مشاكل في اختبارات شبكة النواة في أداة تتبُّع المشاكل في Android باستخدام التصنيف Component-Networking.
توثيق عمليات الإيداع وإضافة الاختبارات
الإبلاغ عن المشاكل كما هو موضّح أعلاه، وتحميل تغيير لحلّ المشكلة، إذا كان ذلك ممكنًا، في الحالات التالية:
- لا تجتاز الاختبارات شجرات النواة الشائعة
- إذا عثرت على عملية دمج ضرورية لم تتم الإشارة إليها في التعليقات المصدر،
- يتطلّب اجتياز الاختبارات على نُسخ النواة الأولية إجراء تغييرات كبيرة
- تعتقد أنّ الاختبارات مفرطة التحديد، أو أنّ الاختبار سيفشل في نواة مستقبلية
- تريد إضافة المزيد من الاختبارات أو المزيد من التغطية إلى الاختبارات الحالية.