تست های واحد شبکه های هسته

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

چرا تست ها را اجرا کنیم؟

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

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

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

با استفاده از تست ها

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

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

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

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

به طور کلی، رفع این مشکل باید به عهده ارائه دهنده درخت هسته (مانند چیپ ست یا فروشنده SoC) باشد. ما با OEM ها و فروشندگان کار می کنیم تا اطمینان حاصل کنیم که هسته های فعلی و آینده برای ARCH=um SUBARCH=x86_64 بدون نیاز به هیچ تغییری کامپایل می شوند.

اجرای تست ها

تست ها در kernel/tests/net/test هستند. توصیه می شود که تست ها از AOSP main اجرا شوند زیرا به روزترین هستند. در برخی موارد، ویژگی‌های هسته که برای عملکرد صحیح در یک نسخه اندرویدی خاص ضروری هستند، هنوز پوشش آزمایشی کاملی در نسخه ارائه شده ندارند. برای اطلاعات در مورد نحوه اجرای آزمایش‌ها، فایل README آزمایش شبکه هسته را ببینید. در اصل، از بالای درخت هسته خود، اجرا کنید:

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

قبولی در آزمون ها

فایل‌های منبع پایتون آزمایش شبکه هسته حاوی نظراتی هستند که تعهدات هسته‌ای را مشخص می‌کنند که برای گذراندن آزمایش‌ها لازم است. آزمایش‌ها باید در درخت‌های هسته مشترک - همه شاخه‌های هسته مشترک android-4.4 و بالاتر - در پروژه kernel/common در AOSP انجام شود. بنابراین، گذراندن تست‌ها بر روی یک هسته به سادگی یک موضوع ادغام مداوم از شاخه هسته مشترک مربوطه است.

کمک کردن

گزارش مشکلات

لطفاً هرگونه مشکل مربوط به آزمایشات شبکه هسته را در ردیاب مشکل Android با برچسب Component-Networking گزارش دهید.

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

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

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