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

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

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

يتم إجراء هذه الاختبارات لثلاثة دلاًء رئيسية:

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

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

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

تستخدِم الاختبارات User-Mode Linux لتشغيل النواة كعملية على جهاز مضيف يعمل بنظام التشغيل Linux. اطّلِع على إنشاء بيئة إنشاء للاطّلاع على إصدارات نظام التشغيل المناسبة. يشغِّل إطار عمل اختبار الوحدة ملفّ kernel باستخدام صورة قرص مناسبة ويُجري الاختبارات من ملفّ نظام مضيف. يتم كتابة الاختبارات بلغة Python وتستخدم واجهات TAP لاختبار سلوك kernel وواجهة برمجة تطبيقات socket.

تجميع النواة لـ ARCH=um

لكي يتم تشغيل الاختبارات، يجب تجميع النواة لنظام التشغيل ARCH=um SUBARCH=x86_64. هذه هي بنية متوافقة مع الإصدارات السابقة وفي أشجار نواة Android الشائعة (مثل android-4.4). ولكن في بعض الأحيان، لا يتم تجميع ملف ‎"ملف kernel" للجهاز في هذا الوضع لأنّ أشجار الأجهزة تحتوي على код خاص بالجهاز أو بالأجهزة في الملفات الشائعة (على سبيل المثال، sys/exit.c).

في كثير من الحالات، يكفي التأكّد من أنّه تم وضع الرمز المخصّص للأجهزة خلف #ifdef. وعادةً ما يكون هذا الرمز هو #ifdef في خيار الضبط الذي يتحكّم في الميزة المحدّدة ذات الصلة بالرمز. إذا لم يتوفّر خيار إعدادات مماثل، ضَع الرمز المخصّص للأجهزة داخل وحدات #ifndef CONFIG_UML.

بشكلٍ عام، يجب أن يكون حلّ هذه المشكلة من مسؤولية مقدّم شجرة النواة (مثل مورّد شريحة المعالجة أو شريحة النظام على الرقاقة). نحن نعمل مع المصنّعين الأصليين للأجهزة والمورّدين لضمان compiling أنّ نواة النظام الحالية والمستقبلية تتوافق مع ARCH=um SUBARCH=x86_64 بدون الحاجة إلى إجراء أي تغييرات.

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

يمكن إجراء الاختبارات على kernel/tests/net/test. ننصحك بإجراء الاختبارات من AOSP main لأنّه هو أحدث إصدار. في بعض الحالات، لا تتوفّر تغطية اختبار كاملة في الإصدار المحدّد لميزات kernel الضرورية ليعمل بشكلٍ سليم في إصدار معيّن من Android. للحصول على معلومات عن كيفية إجراء الاختبارات، يُرجى الاطّلاع على ملف README الخاص باختبارات kernel network. في الأساس، من أعلى شجرة kernel، يمكنك تنفيذ ما يلي:

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

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

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

المساهمات

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

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

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

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

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