آزمون‌های واحد شبکه‌سازی هسته

از Android 5.0، عملکرد صحیح پشته شبکه Android در هسته‌های Linux نیازمند تعدادی تعهد است که نسبتاً اخیراً به بالادست منتقل شده‌اند یا هنوز به بالادست منتقل نشده‌اند. تأیید دستی عملکرد هسته موردنیاز یا پیگیری تعهدات ازدست‌رفته آسان نیست، بنابراین تیم Android آزمایش‌هایی را که برای اطمینان از عملکرد هسته طبق انتظار استفاده می‌کند هم‌رسانی می‌کند.

دلایل اجرای آزمون‌ها

این آزمایش‌ها به سه دلیل اصلی وجود دارند:

  1. نسخه دقیق هسته Linux که در دستگاه استفاده می‌شود معمولاً مختص دستگاه است و بدون اجرای آزمایش‌ها، نمی‌توان فهمید که آیا هسته‌ای به‌درستی کار می‌کند یا نه.
  2. انتقال به جلو و انتقال به عقب وصله‌های هسته به نسخه‌های مختلف هسته یا درخت‌های دستگاه مختلف ممکن است مشکلات ظریفی ایجاد کند که بدون اجرای آزمایش‌ها قابل تشخیص نباشند.
  3. ویژگی‌های جدید شبکه ممکن است به عملکرد جدید هسته یا رفع اشکال هسته نیاز داشته باشد.

اگر آزمایش‌ها موفقیت‌آمیز نباشد، پشته شبکه دستگاه رفتار نادرستی خواهد داشت و باعث ایجاد اشکال‌های اتصال‌پذیری قابل‌مشاهده برای کاربر می‌شود (مثل قطع شدن شبکه‌های Wi-Fi). این دستگاه احتمالاً در آزمایش‌های «مجموعه آزمایش سازگاری Android» (CTS) نیز ناموفق خواهد بود.

استفاده از آزمایش‌ها

آزمایش‌ها از User-Mode Linux برای راه‌اندازی هسته به‌عنوان فرایند در ماشین میزبان Linux استفاده می‌کنند. برای نسخه‌های سیستم‌عامل مناسب، ایجاد محیط ساخت را ببینید. چارچوب آزمایش واحد، هسته را با تصویر دیسک مناسب راه‌اندازی می‌کند و آزمایش‌ها را از سیستم فایل میزبان اجرا می‌کند. آزمایش‌ها به زبان Python نوشته شده‌اند و از رابط‌های TAP برای ارزیابی رفتار هسته و API سوکت استفاده می‌کنند.

ترجمه کردن هسته برای ARCH=um

برای اجرای آزمایش‌ها، هسته باید برای ARCH=um SUBARCH=x86_64 تدوین شود. این معماری هم در بالادست و هم در درخت‌های هسته مشترک Android (مثل android-4.4) پشتیبانی می‌شود. اما گاهی‌اوقات هسته‌های دستگاه در این حالت کامپایل نمی‌شوند زیرا درخت‌های دستگاه حاوی کد مختص دستگاه یا مختص سخت‌افزار در فایل‌های مشترک هستند (برای مثال sys/exit.c).

در بسیاری از موارد، کافی است مطمئن شوید که کد مختص سخت‌افزار پشت #ifdef قرار دارد. معمولاً این باید #ifdef در گزینه پیکربندی باشد که ویژگی خاص مربوط به کد را کنترل می‌کند. اگر چنین گزینه پیکربندی وجود ندارد، کد مخصوص سخت‌افزار را در بلوک‌های #ifndef CONFIG_UML قرار دهید.

به‌طورکلی، رفع این مشکل باید برعهده ارائه‌دهنده درخت هسته (مانند فروشنده تراشه یا SoC) باشد. درحال همکاری با سازندگان تجهیزات اصلی و فروشندگان هستیم تا مطمئن شویم که هسته‌های فعلی و آینده برای 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 با برچسب Component-Networking گزارش کنید.

تعهدات سند و افزودن آزمایش‌ها

مشکلات را همان‌طور که در بالا توضیح داده شده است گزارش کنید و درصورت امکان، تغییری برای رفع مشکل بارگذاری کنید، اگر:

  • آزمایش‌ها در درخت‌های هسته مشترک قبول نمی‌شوند
  • شما تغییرات ضروری را پیدا می‌کنید که در نظرات منبع ذکر نشده است،
  • برای اینکه آزمایش‌ها در هسته‌های بالادستی موفق باشند، باید تغییرات عمده‌ای ایجاد شود
  • معتقدید که آزمایش‌ها بیش‌ازحد مشخص شده‌اند یا آزمایش در هسته‌های آینده ناموفق است
  • می‌خواهید آزمایش‌های بیشتری اضافه کنید یا پوشش آزمایش‌های موجود را افزایش دهید.