Testy jednostkowe sieci jądra

Od wersji Androida 5.0 prawidłowe działanie stosu sieciowego Androida na jądrach Linuksa wymaga szeregu zatwierdzeń, które zostały przesłane stosunkowo niedawno lub jeszcze nie zostały przesłane. Nie jest łatwo ręcznie zweryfikować wymaganą funkcjonalność jądra lub wyśledzić brakujące zatwierdzenia, dlatego zespół Androida udostępnia testy, których używa, aby upewnić się, że jądro działa zgodnie z oczekiwaniami.

Po co przeprowadzać testy?

Testy te istnieją z trzech głównych powodów:

  1. Dokładna wersja jądra Linuksa używana na urządzeniu jest zazwyczaj specyficzna dla danego urządzenia i bez przeprowadzenia testów trudno stwierdzić, czy którekolwiek jądro będzie działać poprawnie.
  2. Przenoszenie i przenoszenie poprawek jądra do różnych wersji jądra lub różnych drzew urządzeń może powodować subtelne problemy, których nie da się wykryć bez przeprowadzenia testów.
  3. Nowe funkcje sieciowe mogą wymagać nowej funkcjonalności jądra lub poprawek błędów jądra.

Jeśli testy nie zakończą się pomyślnie, stos sieciowy urządzenia będzie zachowywał się nieprawidłowo, powodując widoczne dla użytkownika błędy w łączności (takie jak wypadanie z sieci Wi-Fi). Urządzenie prawdopodobnie nie przejdzie także testów pakietu Android Compatibility Test Suite (CTS).

Korzystanie z testów

Testy wykorzystują system Linux w trybie użytkownika do rozruchu jądra jako procesu na komputerze hosta z systemem Linux. Aby zapoznać się z odpowiednimi wersjami systemu operacyjnego, zobacz Tworzenie środowiska kompilacji . Struktura testów jednostkowych uruchamia jądro z odpowiednim obrazem dysku i uruchamia testy z systemu plików hosta. Testy są napisane w Pythonie i wykorzystują interfejsy TAP do ćwiczenia zachowania jądra i API gniazd.

Kompilacja jądra dla ARCH=um

Aby testy mogły zostać uruchomione, jądro musi się skompilować dla ARCH=um SUBARCH=x86_64 . Jest to obsługiwana architektura zarówno powyżej, jak i we wspólnych drzewach jądra Androida (takich jak 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 (na przykład sys/exit.c ).

W wielu przypadkach wystarczy upewnić się, że za #ifdef znajduje się kod specyficzny dla sprzętu. Zwykle powinno to być #ifdef opcji konfiguracyjnej, 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 powinno należeć do dostawcy drzewa jądra (takiego jak dostawca chipsetu lub SoC). Współpracujemy z producentami OEM i dostawcami, aby zapewnić, że obecne i przyszłe jądra będą kompilować się dla ARCH=um SUBARCH=x86_64 bez konieczności wprowadzania jakichkolwiek zmian.

Przeprowadzanie testów

Testy znajdują się pod kernel/tests/net/test . Zaleca się uruchamianie testów z poziomu głównego AOSP, ponieważ są one najbardziej aktualne; w niektórych przypadkach funkcje jądra niezbędne do prawidłowego działania w danej wersji Androida nie mają jeszcze pełnego zasięgu testowego w danej wersji. Informacje na temat uruchamiania testów można znaleźć w pliku README testu sieci jądra . Zasadniczo, z góry drzewa jądra, uruchom:

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

Przejście testów

Pliki źródłowe języka Python dotyczące testu sieci jądra zawierają komentarze określające zatwierdzenia jądra, o których wiadomo, że są wymagane do zaliczenia testów. Testy powinny przejść we wspólnych drzewach jądra - wszystkich popularnych gałęziach jądra android-4.4 i nowszych - w kernel/common projekcie w AOSP. Dlatego zaliczenie testów jądra polega po prostu na ciągłym łączeniu się z odpowiednią wspólną gałęzią jądra.

Wkład

Zgłaszanie problemów

Wszelkie problemy z testami sieci jądra należy zgłaszać w narzędziu do śledzenia problemów systemu Android za pomocą etykiety Component-Networking .

Dokumentowanie zatwierdzeń i dodawanie testów

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

  • Testy nie obejmują zwykłych drzew jądra
  • Znajdujesz niezbędne zatwierdzenie, o którym nie wspomniano w komentarzach źródłowych,
  • Przekazanie testów na jądra nadrzędne wymaga poważnych zmian
  • Uważasz, że testy są zawyżone lub testy w przyszłych jądrach kończą się niepowodzeniem
  • Chcesz dodać więcej testów lub zwiększyć zasięg istniejących testów.