Tests unitaires du réseau à noyau

Depuis Android 5.0, le bon fonctionnement de la pile réseau Android sous Linux les noyaux nécessitent un certain nombre de commits relativement récents en amont. ou n'en sont pas encore arrivés en amont. Il n'est pas facile de vérifier manuellement les fonctionnalités de noyau requises ou suivre les commits manquants. L'équipe Android partage les tests qu’il utilise pour s’assurer que le noyau se comporte comme prévu.

Raisons d'exécuter les tests

Ces tests existent pour trois principaux raisons:

  1. La version exacte du noyau Linux utilisée sur un périphérique est généralement spécifique à un appareil, et il est difficile de savoir si un noyau fonctionne correctement sans exécuter les tests.
  2. Les transferts de transfert rétroporter les correctifs du noyau vers différentes versions les arborescences de périphériques peuvent introduire des problèmes subtils qu'il est impossible de détecter sans l'exécution des tests.
  3. Les nouvelles fonctionnalités de mise en réseau peuvent nécessiter de nouvelles fonctionnalités de noyau ou un bug du noyau ou de correctifs.

Si les tests échouent, la pile réseau de l'appareil se comporte de manière incorrecte, ce qui entraîne des bugs de connectivité visibles par l'utilisateur (tels que réseaux Wi-Fi). Il est probable que l'appareil échoue également au test de compatibilité Android. (CTS).

Utiliser les tests

Les tests utilisent Linux en mode utilisateur pour démarrer le noyau en tant que processus sur une machine hôte Linux. Voir Établir un environnement de compilation pour avec les versions appropriées des systèmes d'exploitation. Framework de tests unitaires démarre le noyau avec une image disque appropriée et exécute les tests à partir du le système de fichiers hôte. Les tests sont écrits en Python et utilisent des interfaces TAP pour le comportement du noyau et l'API de socket.

Compiler le noyau pour ARCH=um

Pour exécuter les tests, le noyau doit se compiler pour ARCH=um SUBARCH=x86_64. Il s'agit d'un architecture compatible en amont et dans les arborescences de noyau Android courantes (android-4.4, par exemple). Mais parfois, l’appareil les noyaux ne se compilent pas dans ce mode, car les arborescences de périphériques contiennent code spécifique à l'appareil ou au matériel dans les fichiers courants (par exemple, sys/exit.c).

Dans de nombreux cas, il suffit de s'assurer que le code spécifique au matériel se trouve derrière un #ifdef. Généralement, cela devrait être un #ifdef sur une option de configuration qui contrôle la fonctionnalité pertinente pour le code. En l'absence d'option de configuration de ce type, placez code spécifique au matériel dans des blocs #ifndef CONFIG_UML.

Dans en général, la résolution de ce problème devrait être la responsabilité du fournisseur de l'arborescence du noyau (comme le fournisseur du chipset ou du SoC). Nous travaillons avec les OEM et les fournisseurs que les noyaux actuels et futurs se compilent pour ARCH=um SUBARCH=x86_64 sans nécessiter aucune modification.

Exécuter les tests

Les tests ont lieu à kernel/tests/net/test. Il est recommandé d'exécuter les tests depuis AOSP main, car ils sont les plus à jour ; dans certains cas, les fonctions du noyau qui sont nécessaires pour le bon fonctionnement d'une version d'Android donnée n'ont pas encore de couverture de test complète. dans l'album donné. Pour plus d'informations sur l'exécution des tests, reportez-vous au noyau fichier README du test du réseau. En gros, en haut de l'arborescence du noyau, exécutez la commande suivante:

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

Réussir les tests

Python de test réseau du noyau les fichiers sources contiennent des commentaires qui spécifient les commits du noyau connus pour être requises pour réussir les tests. Les tests devraient réussir dans les arbres de noyau courants branches courantes du noyau android-4.4 et versions ultérieures : dans le kernel/common projet dans AOSP. Par conséquent, réussir les tests sur un noyau est simplement une question en continu à partir de la branche commune du noyau correspondante.

Contributions

Signaler des problèmes

Signalez tout problème lié aux tests réseau du noyau dans le package Android Issue Tracker avec l'outil Component-Networking libellé.

Documenter les commits et ajouter des tests

Signalez les problèmes comme décrit ci-dessus et, si possible, importez une modification pour les résoudre. si:

  • Les tests ne réussissent pas sur les arbres de noyau courants
  • Toi trouver un commit nécessaire non mentionné dans les commentaires de la source,
  • La réussite des tests sur les noyaux en amont nécessite des modifications majeures
  • vous pensez que les tests sont surspécifiés ou qu'ils échouent à une date ultérieure noyaux
  • Vous souhaitez ajouter des tests ou une couverture plus étendue à des tests.