اختبارات وحدة شبكة النواة

منذ Android 5.0، يتطلّب التشغيل السليم لمجموعة بروتوكولات الشبكة في Android على أنوية Linux عددًا من عمليات الإرسال التي تم إرسالها إلى المستودع الرئيسي مؤخرًا نسبيًا أو لم يتم إرسالها بعد. ليس من السهل التحقّق يدويًا من وظائف النواة المطلوبة أو تتبُّع عمليات الإرسال المفقودة، لذا يشارك فريق Android الاختبارات التي يستخدمها للتأكّد من أنّ النواة تعمل على النحو المتوقّع.

أسباب إجراء الاختبارات

تتوفّر هذه الاختبارات لثلاثة أسباب رئيسية:

  1. عادةً ما يكون الإصدار الدقيق لنواة Linux المستخدَمة على الجهاز خاصًا بالجهاز، ومن الصعب معرفة ما إذا كانت أي نواة تعمل بشكلٍ سليم بدون إجراء الاختبارات.
  2. قد يؤدي نقل تصحيحات النواة إلى إصدارات مختلفة من النواة أو إلى أشجار أجهزة مختلفة إلى حدوث مشاكل دقيقة لا يمكن رصدها بدون إجراء الاختبارات.
  3. قد تتطلّب ميزات الشبكة الجديدة وظائف جديدة في النواة أو إصلاح أخطاء في النواة.

إذا لم تجتز الاختبارات، ستعمل مجموعة بروتوكولات الشبكة في الجهاز بشكلٍ غير سليم، ما يؤدي إلى حدوث أخطاء في الاتصال تظهر للمستخدم (مثل الانقطاع عن شبكات Wi-Fi). من المرجّح أيضًا أن يفشل الجهاز في اختبارات مجموعة اختبار التوافق (CTS) في Android.

استخدام الاختبارات

تستخدم الاختبارات 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 لأنّها الأحدث. في بعض الحالات، لا تتوفّر تغطية اختبار كاملة في الإصدار المحدّد لميزات النواة الضرورية للتشغيل السليم في إصدار Android معيّن. لمعرفة كيفية إجراء الاختبارات، يمكنك الاطّلاع على ملف README الخاص باختبار شبكة النواة. بشكلٍ أساسي، من أعلى شجرة النواة، يمكنك تشغيل:

ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh

اجتياز الاختبارات

تحتوي ملفات مصدر Python الخاصة باختبار شبكة النواة على تعليقات تحدّد عمليات إرسال النواة المعروفة بأنّها مطلوبة لاجتياز الاختبارات. يجب أن تجتاز الاختبارات أشجار النواة الشائعة، أي جميع فروع النواة الشائعة android-4.4 والإصدارات الأحدث، في kernel/common مشروع في AOSP. لذلك، لا يتطلّب اجتياز الاختبارات على نواة معيّنة سوى دمج مستمر من فرع النواة الشائع المقابل.

المساهمات

الإبلاغ عن مشاكل

يمكنك الإبلاغ عن أي مشاكل في اختبارات شبكة النواة في أداة تتبُّع المشاكل في Android باستخدام التصنيف "الشبكات".

توثيق عمليات الإرسال وإضافة الاختبارات

يمكنك الإبلاغ عن المشاكل كما هو موضّح أعلاه، وإذا أمكن، يمكنك تحميل تغيير لإصلاح المشكلة في الحالات التالية:

  • إذا لم تجتز الاختبارات أشجار النواة الشائعة
  • إذا عثرت على عملية إرسال ضرورية غير مذكورة في تعليقات المصدر،
  • إذا كان اجتياز الاختبارات على أنوية المستودع الرئيسي يتطلّب تغييرات كبيرة
  • إذا كنت تعتقد أنّ الاختبارات مفرطة التحديد، أو إذا فشل الاختبار على أنوية مستقبلية
  • إذا أردت إضافة المزيد من الاختبارات أو زيادة التغطية للاختبارات الحالية