Pengujian unit jaringan kernel

Sejak Android 5.0, pengoperasian yang tepat dari stack jaringan Android di kernel Linux memerlukan sejumlah commit yang di-upstream relatif baru-baru ini atau belum di-upstream. Tidak mudah untuk memverifikasi secara manual fungsi kernel yang diperlukan atau melacak commit yang hilang, sehingga tim Android membagikan pengujian yang digunakannya untuk memastikan kernel berperilaku seperti yang diharapkan.

Alasan untuk menjalankan pengujian

Pengujian ini ada karena tiga alasan utama:

  1. Versi persis kernel Linux yang digunakan di perangkat biasanya khusus untuk perangkat, dan sulit untuk mengetahui apakah kernel tertentu berfungsi dengan benar tanpa menjalankan pengujian.
  2. Meneruskan dan mengembalikan patch kernel ke versi kernel yang berbeda atau pohon perangkat yang berbeda dapat menimbulkan masalah halus yang tidak mungkin ditemukan tanpa menjalankan pengujian.
  3. Fitur jaringan baru mungkin memerlukan fungsi kernel baru atau perbaikan bug kernel.

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

Menggunakan pengujian

Pengujian menggunakan User-Mode Linux untuk mem-boot kernel sebagai proses di komputer host Linux. Lihat Menyiapkan Lingkungan Build untuk versi sistem operasi yang sesuai. Framework pengujian unit mem-boot kernel dengan image disk yang sesuai dan menjalankan pengujian dari sistem file host. Pengujian ditulis dalam Python dan menggunakan antarmuka TAP untuk melatih perilaku kernel dan socket API.

Kompilasi kernel untuk ARCH=um

Agar pengujian dapat berjalan, kernel harus dikompilasi untuk ARCH=um SUBARCH=x86_64. Ini adalah arsitektur yang didukung di upstream dan 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 khusus hardware dalam file umum (misalnya, sys/exit.c).

Dalam banyak kasus, cukup untuk memastikan bahwa kode khusus hardware 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 tersebut, masukkan kode khusus hardware di dalam blok #ifndef CONFIG_UML.

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

Menjalankan pengujian

Pengujian berada di kernel/tests/net/test. Sebaiknya pengujian dijalankan dari AOSP main karena pengujian tersebut adalah yang paling terbaru; dalam beberapa kasus, fitur kernel yang diperlukan untuk pengoperasian yang tepat dalam rilis Android tertentu belum memiliki cakupan pengujian penuh dalam rilis tersebut. Untuk mengetahui informasi tentang cara menjalankan pengujian, lihat file README pengujian jaringan kernel. Pada dasarnya, dari bagian atas struktur kernel, jalankan:

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

Lulus pengujian

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

Kontribusi

Laporkan masalah

Laporkan masalah apa pun terkait uji jaringan kernel di pelacak masalah Android dengan label Component-Networking.

Mengirimkan dokumen dan menambahkan pengujian

Laporkan masalah seperti yang dijelaskan di atas, dan jika memungkinkan, upload perubahan untuk memperbaiki masalah tersebut, jika:

  • Pengujian tidak lulus pada pohon kernel umum
  • Anda menemukan commit yang diperlukan yang tidak disebutkan dalam komentar sumber,
  • Agar lulus pengujian pada kernel upstream, diperlukan perubahan besar
  • Anda yakin bahwa pengujian terlalu ditentukan, atau pengujian gagal pada kernel mendatang
  • Anda ingin menambahkan lebih banyak pengujian atau cakupan ke pengujian yang ada.