O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Testes de unidade de rede do kernel

Desde o Android 5.0, a operação adequada da pilha de rede do Android nos kernels do Linux requer uma série de commits que foram upstreamed recentemente ou ainda não foram feitos upstream. Não é fácil verificar manualmente a funcionalidade necessária do kernel ou rastrear os commits ausentes, então a equipe do Android está compartilhando os testes que usa para garantir que o kernel se comporte conforme o esperado.

Por que fazer os testes?

Esses testes existem por três razões principais:

  1. A versão exata do kernel Linux usada em um dispositivo é normalmente específica do dispositivo e é difícil saber se algum kernel funcionará corretamente sem executar os testes.
  2. Portar para frente e para trás os patches do kernel para diferentes versões do kernel ou diferentes árvores de dispositivos pode introduzir problemas sutis que podem ser impossíveis de detectar sem executar os testes.
  3. Novos recursos de rede podem exigir novas funcionalidades do kernel ou correções de bugs do kernel.

Se os testes não passarem, a pilha de rede do dispositivo se comportará incorretamente, causando bugs de conectividade visíveis ao usuário (como queda de redes Wi-Fi). O dispositivo provavelmente também falhará nos testes do Android Compatibility Test Suite (CTS).

Usando os testes

Os testes usam Linux em modo de usuário para inicializar o kernel como um processo em uma máquina host Linux. Consulte Estabelecendo um ambiente de construção para versões de sistema operacional adequadas. A estrutura de teste de unidade inicializa o kernel com uma imagem de disco apropriada e executa os testes do sistema de arquivos host. Os testes são escritos em Python 2.xe usam interfaces TAP para exercitar o comportamento do kernel e a API de soquete.

Compilando o kernel para ARCH = um

Para que os testes sejam executados, o kernel deve compilar para ARCH=um SUBARCH=x86_64 . Esta é uma arquitetura com suporte tanto no upstream quanto nas árvores de kernel Android comuns (como o android-4.4 ). Mas às vezes os kernels do dispositivo não compilam neste modo porque as árvores de dispositivo contêm código específico do dispositivo ou específico do hardware em arquivos comuns (por exemplo sys/exit.c ).

Em muitos casos, é suficiente garantir que o código específico do hardware esteja por trás de um #ifdef . Normalmente, isso deve ser um #ifdef em uma opção de configuração que controla o recurso específico relevante para o código. Se não houver essa opção de configuração, coloque o código específico do hardware dentro #ifndef CONFIG_UML blocos #ifndef CONFIG_UML .

Em geral, consertar isso deve ser responsabilidade do provedor da árvore do kernel (como o chipset ou o fornecedor do SoC). Estamos trabalhando com OEMs e fornecedores para garantir que os kernels atuais e futuros sejam compilados para ARCH=um SUBARCH=x86_64 sem a necessidade de nenhuma alteração.

Executando os testes

Os testes estão em kernel/tests/net/test . Recomenda-se que os testes sejam executados a partir do mestre AOSP, pois são os mais atualizados; em alguns casos, os recursos do kernel que são necessários para a operação adequada em uma determinada versão do Android ainda não têm cobertura de teste completa nessa versão. Para obter informações sobre como executar os testes, consulte o arquivo README do teste de rede do kernel . Basicamente, do topo da árvore do kernel, execute:

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

Passando nos testes

Os arquivos de origem Python de teste de rede do kernel contêm comentários que especificam os commits do kernel que são necessários para passar nos testes. Os testes devem passar nas árvores comuns do kernel - todos os ramos comuns do kernel android-4.4 e superior - no kernel/common projeto kernel/common no AOSP. Portanto, passar nos testes de um kernel é simplesmente uma questão de mesclar continuamente a partir do branch comum do kernel correspondente.

Contribuindo

Relatórios de problemas

Relate quaisquer problemas com os testes de rede do kernel no rastreador de problemas do Android com o rótulo Component-Networking .

Documentar confirmações e adicionar testes

Relate os problemas conforme descrito acima e, se possível, faça upload de uma alteração para corrigir o problema, se:

  • Os testes não passam nas árvores de kernel comuns
  • Você encontra um commit necessário que não é mencionado nos comentários da fonte,
  • Fazer com que os testes passem nos kernels upstream requer mudanças importantes
  • Você acredita que os testes estão superespecificados ou o teste falhou em kernels futuros
  • Você gostaria de adicionar mais testes ou mais cobertura aos testes existentes.