Çekirdek ağ birim testleri

Android 5.0'dan beri, Linux çekirdeklerinde Android ağ yığınının düzgün çalışması için nispeten yakın zamanda yukarı akışa aktarılmış veya henüz yukarı akışa aktarılmamış bir dizi commit gerekir. Gerekli çekirdek işlevini manuel olarak doğrulamak veya eksik commit'leri izlemek kolay değildir. Bu nedenle Android ekibi, çekirdeğin beklendiği gibi çalıştığından emin olmak için kullandığı testleri paylaşıyor.

Testleri çalıştırma nedenleri

Bu testlerin yapılmasının üç temel nedeni vardır:

  1. Bir cihazda kullanılan Linux çekirdeğinin tam sürümü genellikle cihaza özeldir ve testler çalıştırılmadan herhangi bir çekirdeğin düzgün çalışıp çalışmadığını bilmek zordur.
  2. Çekirdek yamalarının farklı çekirdek sürümlerine veya farklı cihaz ağaçlarına ileri ve geri aktarılması, testler çalıştırılmadan tespit edilmesi imkansız olabilecek küçük sorunlara yol açabilir.
  3. Yeni ağ özellikleri için yeni çekirdek işlevleri veya çekirdek hatalarının düzeltilmesi gerekebilir.

Testler başarılı olmazsa cihazın ağ yığını hatalı davranır ve kullanıcı tarafından görülebilen bağlantı hatalarına (ör. kablosuz ağlardan düşme) neden olur. Cihazın Android Compatibility Test Suite (CTS) testlerini de geçememesi muhtemeldir.

Testleri kullanma

Testler, çekirdeği bir Linux ana makinesinde işlem olarak başlatmak için Kullanıcı Modu Linux'u kullanır. Uygun işletim sistemi sürümleri için Derleme Ortamı Oluşturma bölümüne bakın. Birim testi çerçevesi, çekirdeği uygun bir disk görüntüsüyle başlatır ve testleri ana makine dosya sisteminden çalıştırır. Testler Python ile yazılır ve çekirdek davranışını ve soket API'sini kullanmak için TAP arayüzlerini kullanır.

ARCH=um için çekirdeği derleyin.

Testlerin çalıştırılabilmesi için çekirdeğin ARCH=um SUBARCH=x86_64 için derlenmesi gerekir. Bu, hem yukarı akışta hem de ortak Android çekirdek ağaçlarında (ör. android-4.4) desteklenen bir mimaridir. Ancak bazen cihaz ağaçları ortak dosyalarda (ör. sys/exit.c) cihaza veya donanıma özel kod içerdiğinden cihaz çekirdekleri bu modda derlenmez.

Çoğu durumda, donanıma özel kodun bir #ifdef arkasında olmasını sağlamak yeterlidir. Bu genellikle kodla ilgili belirli özelliği kontrol eden bir yapılandırma seçeneğinde #ifdef olmalıdır. Böyle bir yapılandırma seçeneği yoksa donanıma özel kodu #ifndef CONFIG_UML bloklarının içine yerleştirin.

Genel olarak, bu sorunu düzeltmek çekirdek ağacı sağlayıcısının (ör. yonga seti veya SoC satıcısı) sorumluluğundadır. Mevcut ve gelecekteki çekirdeklerin herhangi bir değişiklik gerektirmeden ARCH=um SUBARCH=x86_64 için derlenmesini sağlamak üzere OEM'ler ve tedarikçilerle birlikte çalışıyoruz.

Testleri çalıştırma

Testler kernel/tests/net/test adresinde yer alıyor. En güncel testler oldukları için AOSP ana dalından çalıştırılmaları önerilir. Bazı durumlarda, belirli bir Android sürümünde düzgün çalışma için gerekli olan çekirdek özelliklerinin, söz konusu sürümde henüz tam test kapsamı yoktur. Testlerin nasıl çalıştırılacağı hakkında bilgi edinmek için kernel network test README dosyasını inceleyin. Temel olarak, çekirdek ağacınızın en üstünden şunu çalıştırın:

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

Testleri geçme

Çekirdek ağı testi Python kaynak dosyaları, testleri geçmek için gerekli olduğu bilinen çekirdek commit'lerini belirten yorumlar içerir. Testler, AOSP'deki kernel/common projesinde ortak çekirdek ağaçlarında (tüm ortak çekirdek dalları android-4.4 ve üzeri) başarılı olmalıdır. Bu nedenle, bir çekirdekteki testleri geçmek yalnızca ilgili ortak çekirdek dalından sürekli olarak birleştirme yapmaktan ibarettir.

Katkılar

Sorun bildir

Çekirdek ağ testleriyle ilgili sorunları Android sorun izleyicisinde Component-Networking etiketiyle bildirin.

Doküman değişikliklerini işleme ve test ekleme

Yukarıda açıklandığı şekilde sorunları bildirin ve mümkünse sorunu düzeltmek için bir değişiklik yükleyin:

  • Testler, ortak çekirdek ağaçlarında başarılı olmuyor
  • Kaynak yorumlarda belirtilmeyen gerekli bir commit bulursanız,
  • Testlerin yukarı akış çekirdeklerinde başarılı olması için büyük değişiklikler yapılması gerekir.
  • Testlerin aşırı derecede ayrıntılı olduğunu veya testin gelecekteki çekirdeklerde başarısız olacağını düşünüyorsanız
  • Mevcut testlere daha fazla test veya daha fazla kapsam eklemek istiyorsanız.