Pengujian unit jaringan kernel

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

Alasan untuk menjalankan pengujian

Pengujian ini ada karena tiga alasan utama:

  1. Versi kernel Linux yang tepat yang digunakan di perangkat biasanya khusus perangkat, dan sulit untuk mengetahui apakah kernel berfungsi dengan benar tanpa menjalankan pengujian.
  2. Men-forward-port dan men-back-port patch kernel ke versi kernel yang berbeda atau hierarki perangkat yang berbeda dapat menyebabkan masalah halus yang mungkin tidak dapat ditemukan tanpa menjalankan pengujian.
  3. Fitur jaringan baru mungkin memerlukan fungsi kernel baru atau perbaikan bug kernel.

Jika pengujian tidak lulus, stack jaringan perangkat akan berperilaku tidak benar, sehingga 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 pengujian

Pengujian menggunakan Linux Mode Pengguna untuk mem-booting kernel sebagai proses di komputer host Linux. Lihat Membangun Lingkungan Build untuk mengetahui versi sistem operasi yang sesuai. Framework pengujian unit mem-booting kernel dengan image disk yang sesuai dan menjalankan pengujian dari sistem file host. Pengujian ditulis dalam Python dan menggunakan antarmuka TAP untuk menjalankan perilaku kernel dan API soket.

Mengompilasi kernel untuk ARCH=um

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

Dalam banyak kasus, cukup memastikan bahwa kode khusus hardware berada di belakang #ifdef. Biasanya ini harus merupakan #ifdef pada opsi konfigurasi yang mengontrol fitur tertentu yang relevan dengan kode. Jika tidak ada opsi konfigurasi tersebut, masukkan kode khusus hardware di dalam blok #ifndef CONFIG_UML.

Secara umum, memperbaiki hal ini adalah tanggung jawab penyedia hierarki 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

Pengujiannya ada di kernel/tests/net/test. Sebaiknya pengujian dijalankan dari AOSP utama karena pengujian tersebut adalah yang terbaru; dalam beberapa kasus, fitur kernel yang diperlukan untuk operasi 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 hierarki 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 hierarki 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 penggabungan yang terus-menerus dari cabang kernel umum yang sesuai.

Kontribusi

Laporkan masalah

Laporkan masalah apa pun terkait pengujian jaringan kernel di issue tracker Android dengan label Component-Networking.

Mendokumentasikan commit dan menambahkan pengujian

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

  • Pengujian tidak meneruskan hierarki kernel umum
  • Anda menemukan commit yang diperlukan yang tidak disebutkan dalam komentar sumber,
  • Agar pengujian lulus di 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.