Tes Unit Jaringan Kernel

Sejak Android 5.0, operasi yang benar dari tumpukan jaringan Android pada kernel Linux memerlukan sejumlah komitmen yang relatif baru di-upstream atau belum dibuat di-upstream. Tidak mudah memverifikasi fungsionalitas kernel yang diperlukan secara manual atau melacak komit yang hilang, sehingga tim Android membagikan pengujian yang digunakannya untuk memastikan kernel berperilaku seperti yang diharapkan.

Mengapa menjalankan tes?

Tes ini ada karena tiga alasan utama:

  1. Versi persis dari kernel Linux yang digunakan pada perangkat biasanya khusus perangkat, dan sulit untuk mengetahui apakah kernel apa pun akan berfungsi dengan baik tanpa menjalankan tes.
  2. Mem-forward dan mem-back-port patch kernel ke versi kernel yang berbeda atau pohon perangkat yang berbeda dapat menimbulkan masalah halus yang tidak mungkin dikenali tanpa menjalankan tes.
  3. Fitur jaringan baru mungkin memerlukan fungsionalitas kernel baru atau perbaikan bug kernel.

Jika pengujian tidak lulus, tumpukan jaringan perangkat akan berperilaku tidak benar, menyebabkan bug konektivitas yang terlihat oleh pengguna (seperti terputusnya jaringan Wi-Fi). Perangkat kemungkinan juga akan gagal dalam pengujian Android Compatibility Test Suite (CTS).

Menggunakan tes

Pengujian menggunakan User-Mode Linux untuk mem-boot kernel sebagai proses pada mesin host Linux. Lihat Membangun Lingkungan Bangun untuk versi sistem operasi yang sesuai. Kerangka uji unit mem-boot kernel dengan gambar disk yang sesuai dan menjalankan pengujian dari sistem file host. Tes ditulis dalam Python 2.x dan menggunakan antarmuka TAP untuk menjalankan perilaku kernel dan API soket.

Kompilasi kernel untuk ARCH=um

Agar pengujian dapat berjalan, kernel harus dikompilasi untuk ARCH=um SUBARCH=x86_64 . Ini adalah arsitektur yang didukung baik di hulu maupun di pohon kernel Android umum (seperti android-4.4 ). Namun terkadang kernel perangkat tidak dikompilasi dalam mode ini karena pohon perangkat berisi kode khusus perangkat atau perangkat keras dalam file umum (misalnya sys/exit.c ).

Dalam banyak kasus, cukup memastikan bahwa kode khusus perangkat keras berada di belakang #ifdef . Biasanya ini harus berupa #ifdef pada opsi konfigurasi yang mengontrol fitur spesifik yang relevan dengan kode. Jika tidak ada opsi konfigurasi seperti itu, masukkan kode khusus perangkat keras di dalam blok #ifndef CONFIG_UML .

Secara umum, memperbaiki ini harus menjadi tanggung jawab penyedia pohon kernel (seperti chipset atau vendor SoC). Kami bekerja dengan OEM dan vendor untuk memastikan bahwa kernel saat ini dan yang akan datang akan dikompilasi untuk ARCH=um SUBARCH=x86_64 tanpa memerlukan perubahan apa pun.

Menjalankan tes

Tes ada di kernel/tests/net/test . Direkomendasikan agar pengujian dijalankan dari master AOSP karena ini adalah yang paling mutakhir; dalam beberapa kasus, fitur kernel yang diperlukan untuk pengoperasian yang benar dalam rilis Android tertentu belum memiliki cakupan pengujian penuh dalam rilis yang diberikan. Untuk informasi tentang cara menjalankan pengujian, lihat file README pengujian jaringan kernel . Pada dasarnya, dari atas pohon kernel Anda, jalankan:

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

Lulus tes

File sumber Python pengujian jaringan kernel berisi komentar yang menentukan komit kernel yang diketahui diperlukan untuk lulus pengujian. Tes harus lulus di pohon kernel umum - semua cabang kernel umum android-4.4 dan lebih tinggi - di kernel/common di AOSP. Oleh karena itu, lulus tes pada kernel hanyalah masalah penggabungan terus menerus dari cabang kernel umum yang sesuai.

Berkontribusi

Masalah pelaporan

Laporkan masalah apa pun dengan pengujian jaringan kernel di pelacak masalah Android dengan label Jaringan Komponen .

Mendokumentasikan komit dan menambahkan tes

Laporkan masalah seperti yang dijelaskan di atas, dan jika mungkin unggah perubahan untuk memperbaiki masalah, jika:

  • Tes tidak lulus pada pohon kernel umum
  • Anda menemukan komit yang diperlukan yang tidak disebutkan dalam komentar sumber,
  • Mendapatkan tes untuk lulus pada kernel hulu membutuhkan perubahan besar
  • Anda yakin bahwa pengujian terlalu ditentukan, atau pengujian gagal pada kernel yang akan datang
  • Anda ingin menambahkan lebih banyak tes atau lebih banyak cakupan ke tes yang ada.