منذ الإصدار 5.0 من نظام التشغيل Android، يتطلّب التشغيل السليم لمجموعة بروتوكولات الشبكة في Android على أنظمة Linux الأساسية عددًا من عمليات الإرسال التي تم إرسالها مؤخرًا نسبيًا أو لم يتم إرسالها بعد. وليس من السهل التحقّق يدويًا من وظائف النواة المطلوبة أو تتبُّع عمليات الدمج الناقصة، لذا يشارك فريق Android الاختبارات التي يستخدمها لضمان عمل النواة على النحو المتوقّع.
أسباب إجراء الاختبارات
تتوفّر هذه الاختبارات لثلاثة أسباب رئيسية:
- يختلف إصدار نواة Linux المستخدَم على الجهاز باختلاف الجهاز، ومن الصعب معرفة ما إذا كانت أي نواة تعمل بشكل صحيح بدون إجراء الاختبارات.
- قد يؤدي نقل تصحيحات النواة إلى إصدارات مختلفة من النواة أو إلى أشجار أجهزة مختلفة إلى حدوث مشاكل دقيقة يصعب رصدها بدون إجراء الاختبارات.
- قد تتطلّب ميزات الشبكات الجديدة وظائف جديدة في النواة أو إصلاح أخطاء في النواة.
إذا لم تجتَز الاختبارات، سيتصرف حزمة بروتوكولات الشبكة في الجهاز بشكل غير صحيح، ما يؤدي إلى حدوث أخطاء في الاتصال يلاحظها المستخدمون (مثل عدم الاتصال بشبكات Wi-Fi). من المحتمل أيضًا ألّا يجتاز الجهاز اختبارات "مجموعة أدوات اختبار التوافق" (CTS) لنظام التشغيل Android.
استخدام الاختبارات
تستخدِم الاختبارات User-Mode Linux لتشغيل النواة كعملية على جهاز مضيف يعمل بنظام التشغيل Linux. يمكنك الاطّلاع على إعداد بيئة إصدار لمعرفة إصدارات نظام التشغيل المناسبة. يُشغّل إطار عمل اختبار الوحدة النواة باستخدام صورة قرص مناسبة ويُجري الاختبارات من نظام الملفات المضيف. تتم كتابة الاختبارات بلغة Python وتستخدم واجهات TAP لتنفيذ سلوك النواة وواجهة برمجة التطبيقات socket API.
تجميع النواة لـ 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.
توثيق عمليات الدمج وإضافة الاختبارات
يُرجى الإبلاغ عن المشاكل كما هو موضّح أعلاه، وإذا أمكن، تحميل تغيير لحلّ المشكلة، في الحالات التالية:
- لا تجتاز الاختبارات شجرات النواة الشائعة
- إذا عثرت على عملية دمج ضرورية لم تتم الإشارة إليها في التعليقات المصدر،
- يتطلّب اجتياز الاختبارات على نُسخ النواة الأولية إجراء تغييرات كبيرة
- تعتقد أنّ الاختبارات مفرطة التحديد، أو أنّ الاختبار سيفشل في نواة مستقبلية
- تريد إضافة المزيد من الاختبارات أو المزيد من التغطية إلى الاختبارات الحالية.