Testy jednostkowe sieci jądra

Od Androida 5.0 prawidłowe działanie stosu sieciowego Androida w jądrach Linux wymaga wielu zmian, które zostały stosunkowo niedawno przesłane do głównego repozytorium lub jeszcze się w nim nie znalazły. Ręczne sprawdzenie wymaganej funkcjonalności jądra lub śledzenie brakujących zmian nie jest łatwe, dlatego zespół Androida udostępnia testy, których używa, aby mieć pewność, że jądro działa zgodnie z oczekiwaniami.

Powody przeprowadzania testów

Testy te są przeprowadzane z 3 głównych powodów:

  1. Dokładna wersja jądra Linux używana na urządzeniu jest zwykle specyficzna dla danego urządzenia. Bez przeprowadzenia testów trudno stwierdzić, czy dane jądro działa prawidłowo.
  2. Przenoszenie poprawek jądra do przodu i do tyłu do różnych wersji jądra lub różnych drzew urządzeń może powodować subtelne problemy, których nie można wykryć bez przeprowadzenia testów.
  3. Nowe funkcje sieciowe mogą wymagać nowych funkcji jądra lub poprawek błędów jądra.

Jeśli testy nie przejdą, stos sieciowy urządzenia będzie działać nieprawidłowo, co spowoduje widoczne dla użytkownika błędy łączności (np. rozłączanie z sieciami Wi-Fi). Urządzenie prawdopodobnie nie przejdzie też testów pakietu CTS (Android Compatibility Test Suite).

Korzystanie z testów

Testy używają systemu User-Mode Linux do uruchamiania jądra jako procesu na maszynie hosta z systemem Linux. Odpowiednie wersje systemu operacyjnego znajdziesz w artykule Tworzenie środowiska kompilacji. Platforma testów jednostkowych uruchamia jądro z odpowiednim obrazem dysku i przeprowadza testy z systemu plików hosta. Testy są napisane w Pythonie i używają interfejsów TAP do sprawdzania zachowania jądra i interfejsu API gniazd.

Kompilowanie jądra dla ARCH=um

Aby testy mogły się uruchomić, jądro musi zostać skompilowane dla ARCH=um SUBARCH=x86_64. Jest to obsługiwana architektura zarówno w głównym repozytorium, jak i w typowych drzewach jądra Androida (np. android-4.4). Czasami jednak jądra urządzeń nie kompilują się w tym trybie, ponieważ drzewa urządzeń zawierają kod specyficzny dla urządzenia lub sprzętu w typowych plikach (np. sys/exit.c).

W wielu przypadkach wystarczy upewnić się, że kod specyficzny dla sprzętu znajduje się za #ifdef. Zwykle powinien to być #ifdef w opcji konfiguracji, która kontroluje konkretną funkcję związaną z kodem. Jeśli nie ma takiej opcji konfiguracji, umieść kod specyficzny dla sprzętu w blokach #ifndef CONFIG_UML.

Ogólnie rzecz biorąc, naprawienie tego problemu powinno należeć do dostawcy drzewa jądra (np. dostawcy chipsetu lub SoC). Współpracujemy z producentami OEM i dostawcami, aby zapewnić że obecne i przyszłe jądra będą kompilowane dla ARCH=um SUBARCH=x86_64 bez konieczności wprowadzania zmian.

Przeprowadzanie testów

Testy znajdują się w kernel/tests/net/test. Zalecamy przeprowadzanie testów z głównego repozytorium AOSP , ponieważ są one najbardziej aktualne. W niektórych przypadkach funkcje jądra, które są niezbędne do prawidłowego działania w danej wersji Androida, nie mają jeszcze pełnego pokrycia testowego w tej wersji. Informacje o tym, jak przeprowadzać testy, znajdziesz w pliku README testu sieci jądra. Zasadniczo w górnej części drzewa jądra uruchom:

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

Przechodzenie testów

Pliki źródłowe Pythona testu sieci jądra zawierają komentarze, które określają zmiany jądra wymagane do przejścia testów. Testy powinny przejść w typowych drzewach jądra – wszystkich typowe gałęzie jądra android-4.4 i nowszych – w kernel/common projekcie w AOSP. Dlatego przejście testów w jądrze polega po prostu na ciągłym scalaniu z odpowiedniej typowej gałęzi jądra.

Darowizny

Zgłoś problemy

Wszelkie problemy z testami sieci jądra zgłaszaj w narzędziu do śledzenia problemów z Androidem , używając etykiety Component-Networking .

Dokumentowanie zmian i dodawanie testów

Zgłaszaj problemy w sposób opisany powyżej, a jeśli to możliwe, prześlij zmianę, aby rozwiązać problem, jeśli:

  • testy nie przechodzą w typowych drzewach jądra;
  • znajdziesz niezbędną zmianę, która nie jest wymieniona w komentarzach źródłowych;
  • przejście testów w jądrach głównych wymaga poważnych zmian;
  • uważasz, że testy są zbyt szczegółowe lub testy nie przechodzą w przyszłych jądrach;
  • chcesz dodać więcej testów lub zwiększyć pokrycie istniejących testów.