Tes Unit Jaringan Kernel

Sejak Android 5.0, pengoperasian tumpukan jaringan Android yang benar pada kernel Linux memerlukan sejumlah penerapan yang relatif baru atau belum dilakukan upstream. Tidak mudah untuk memverifikasi fungsionalitas kernel yang diperlukan secara manual atau melacak commit yang hilang, sehingga tim Android membagikan pengujian yang digunakan untuk memastikan kernel berperilaku seperti yang diharapkan.

Mengapa menjalankan tes?

Tes-tes ini ada karena tiga alasan utama:

  1. Versi persis kernel Linux yang digunakan pada suatu perangkat biasanya spesifik untuk perangkat tertentu, dan sulit untuk mengetahui apakah kernel mana pun akan berfungsi dengan baik tanpa menjalankan pengujian.
  2. Memindahkan dan mem-porting ulang patch kernel ke versi kernel yang berbeda atau pohon perangkat yang berbeda dapat menimbulkan masalah halus yang tidak mungkin dikenali tanpa menjalankan pengujian.
  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 Mode Pengguna Linux untuk mem-boot kernel sebagai proses pada mesin host Linux. Lihat Menetapkan Lingkungan Build untuk versi sistem operasi yang sesuai. Kerangka pengujian unit mem-boot kernel dengan image disk yang sesuai dan menjalankan pengujian dari sistem file host. Pengujian ini ditulis dengan Python dan menggunakan antarmuka TAP untuk menjalankan perilaku kernel dan API soket.

Mengompilasi kernel untuk ARCH=um

Agar pengujian dapat berjalan, kernel harus mengkompilasi ARCH=um SUBARCH=x86_64 . Ini adalah arsitektur yang didukung baik di upstream maupun di pohon kernel Android umum (seperti android-4.4 ). Namun terkadang kernel perangkat tidak dapat 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 ke 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 bahwa kernel saat ini dan masa depan akan dikompilasi untuk ARCH=um SUBARCH=x86_64 tanpa memerlukan perubahan apa pun.

Menjalankan tes

Tesnya ada di kernel/tests/net/test . Direkomendasikan agar pengujian dijalankan dari AOSP main karena merupakan pengujian yang paling mutakhir; dalam beberapa kasus, fitur kernel yang diperlukan agar dapat berfungsi dengan baik pada rilis Android tertentu belum memiliki cakupan pengujian penuh pada rilis tersebut. Untuk informasi tentang cara menjalankan pengujian, lihat file README pengujian jaringan kernel . Pada dasarnya, dari bagian atas pohon kernel Anda, jalankan:

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

Lulus ujian

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

Berkontribusi

Masalah pelaporan

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

Mendokumentasikan komitmen dan menambahkan tes

Silakan laporkan masalah seperti dijelaskan di atas, dan jika mungkin unggah perubahan untuk memperbaiki masalah tersebut, jika:

  • Pengujian tidak lolos pada pohon kernel umum
  • Anda menemukan komit yang diperlukan yang tidak disebutkan dalam komentar sumber,
  • Agar pengujian dapat lulus pada kernel upstream memerlukan perubahan besar
  • Anda yakin bahwa pengujian tersebut terlalu spesifik, atau pengujian tersebut gagal pada kernel yang akan datang
  • Anda ingin menambahkan lebih banyak tes atau cakupan lebih banyak ke tes yang ada.