Pengujian unit jaringan kernel

Sejak Android 5.0, operasi tumpukan jaringan Android di Linux dengan benar kernel memerlukan sejumlah commit yang di-upstream baru-baru ini atau belum sampai ke hulu. Tidak mudah untuk memverifikasinya secara manual fungsionalitas kernel yang diperlukan atau melacak commit yang hilang, sehingga tim Android membagikan pengujian yang digunakannya untuk memastikan {i>kernel<i} berperilaku seperti yang diharapkan.

Alasan menjalankan pengujian

Pengujian ini dilakukan untuk tiga jenis alasan:

  1. Versi {i>kernel<i} Linux yang sebenarnya digunakan pada perangkat adalah biasanya perangkat tertentu, dan sulit untuk mengetahui apakah ada {i>kernel<i} berfungsi dengan baik tanpa menjalankan pengujian.
  2. {i>Forward-porting<i} dan mem-back-port patch {i>kernel<i} ke versi {i>kernel<i} yang berbeda atau hierarki perangkat dapat menimbulkan masalah kecil yang tidak mungkin dikenali tanpa menjalankan pengujian.
  3. Fitur jaringan baru mungkin memerlukan fungsi kernel atau bug kernel baru sejumlah perbaikan.

Jika pengujian tidak berhasil, stack jaringan perangkat berperilaku tidak benar, yang menyebabkan bug konektivitas yang terlihat oleh pengguna (seperti jatuh jaringan Wi-Fi). Perangkat mungkin juga akan gagal dalam Pengujian Kompatibilitas Android Pengujian Suite (CTS).

Menggunakan pengujian

Pengujian menggunakan User-Mode Linux untuk mem-booting {i>kernel<i} sebagai proses pada mesin {i>host<i} Linux. Lihat Menetapkan Lingkungan Build untuk versi sistem operasi yang sesuai. Framework pengujian unit mem-booting kernel dengan disk image yang sesuai dan menjalankan pengujian dari sistem file {i>host<i}. Pengujian ditulis dalam Python dan menggunakan antarmuka TAP untuk perilaku kernel olahraga dan socket API.

Kompilasi kernel untuk ARCH=um

Agar pengujian dapat berjalan, kernel harus dikompilasi untuk ARCH=um SUBARCH=x86_64. Ini adalah mendukung arsitektur upstream dan hierarki kernel Android umum (misalnya android-4.4). Tapi terkadang perangkat {i>kernel<i} tidak dikompilasi dalam mode ini karena hierarki perangkat berisi kode khusus perangkat atau kode 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 menjadi #ifdef di opsi konfigurasi yang mengontrol fitur yang relevan dengan kode. Jika tidak ada pilihan konfigurasi seperti itu, masukkan kode khusus hardware di dalam blok #ifndef CONFIG_UML.

Di beberapa umum, perbaikan ini harus menjadi tanggung jawab penyedia pohon {i>kernel<i} (seperti vendor chipset atau SoC). Kami bekerja sama dengan OEM dan vendor untuk memastikan kernel saat ini dan yang akan datang dapat dikompilasi untuk ARCH=um SUBARCH=x86_64 tanpa memerlukan perubahan apa pun.

Menjalankan pengujian

Pengujian akan berlangsung pukul kernel/tests/net/test. Sebaiknya pengujian dijalankan dari layanan utama AOSP karena adalah yang paling baru; dalam beberapa kasus, fitur {i> kernel<i} diperlukan untuk operasi yang benar dalam rilis Android tertentu belum memiliki cakupan pengujian penuh dalam rilis tertentu. Untuk informasi tentang cara menjalankan pengujian, lihat kernel file README uji jaringan. Pada dasarnya, dari bagian atas hierarki {i>kernel<i} Anda, jalankan:

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

Lulus pengujian

Jaringan kernel menguji Python file sumber berisi komentar yang menentukan commit kernel yang diketahui yang diperlukan untuk lulus pengujian. Pengujian harus lulus pohon {i>kernel<i} umum - semua cabang kernel umum android-4.4 dan yang lebih tinggi - di kernel/common project baru di AOSP. Oleh karena itu, lulus pengujian pada {i> kernel<i} hanya masalah secara terus-menerus bergabung dari cabang {i>kernel<i} umum yang sesuai.

Kontribusi

Laporkan masalah

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

Mendokumentasikan commit dan menambahkan pengujian

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

  • Pengujian tidak lulus hierarki kernel umum
  • Anda menemukan commit yang diperlukan yang tidak disebutkan dalam komentar sumber,
  • Agar pengujian dapat lulus kernel upstream, diperlukan perubahan besar
  • Anda yakin bahwa pengujian terlalu tinggi, atau pengujian akan gagal pada masa mendatang {i>kernel<i}
  • Anda ingin menambahkan lebih banyak pengujian atau cakupan yang lebih banyak ke yang ada pengujian.