Skip to main content
Este guia cobre o ciclo de teste e iteração de uma extensão em C++: configurar um servidor local, instalar arquivos .veb, executar testes de regressão e depurar falhas. Ele é o complemento de Criando Extensões em C++, que cobre a compilação inicial, e de Desenvolvimento em C++, que aprofunda a criação de VDFs.
Se você estiver contribuindo com o próprio servidor VillageSQL (e não construindo uma extensão), consulte Compilar a Partir do Código-Fonte, que cobre o fluxo de trabalho completo do desenvolvedor do servidor, incluindo a execução de testes diretamente com o mysql-test-run.pl.

Configurando Seu Ambiente

Para desenvolver e testar extensões, você precisa de um servidor VillageSQL compilado. Siga o guia Clone e Compile a Partir do Código-Fonte para compilar os binários do servidor. Depois de ter uma compilação, use a CLI villagesql para gerenciar uma instância local de servidor de desenvolvimento. Execute todos os comandos a partir do diretório onde o VillageSQL foi instalado.

Iniciando um Servidor de Desenvolvimento Local

Inicialize e inicie uma instância de servidor:
Para definir uma senha de root na inicialização:
Para habilitar ou desabilitar recursos do mysqld em uma execução de teste, passe as flags após um separador --; tudo o que vier depois dele é encaminhado literalmente para o mysqld:
Qualquer argumento não reconhecido antes do -- é rejeitado, portanto use -- para toda flag destinada ao mysqld. Passe --dir <path> antes de qualquer comando para gerenciar múltiplas instâncias independentes, ou use --here para criar um diretório de servidor no diretório de trabalho atual:

Gerenciando Arquivos de Extensão

Antes de instalar uma extensão via SQL, seu arquivo .veb precisa estar presente no servidor. A CLI gerencia o diretório lib/veb/ do servidor:
Arquivos .veb colocados em lib/veb/ antes do init são semeados automaticamente. Após adicionar um arquivo, instale a extensão via SQL:

Executando Testes de Regressão

Execute os testes de regressão de extensões usando o MySQL Test Runner a partir do diretório de compilação do seu VillageSQL.

Executando a Suíte Completa

Para executar todos os testes da sua extensão:

Executando Testes Individuais

Para executar um único caso de teste, especifique o caminho da suíte e o nome do teste:

Criando Novos Testes

Ao adicionar novos recursos ou corrigir bugs, você deve adicionar testes de regressão correspondentes.

Local dos Testes

Os testes de extensão ficam no próprio repositório da extensão, sob um diretório mysql-test/ — e não na árvore mysql-test/suite/ do servidor VillageSQL.
  • Arquivos de teste terminam com .test e vão em mysql-test/t/.
  • Arquivos de resultado esperado terminam com .result e vão em mysql-test/r/.
Por exemplo, para uma extensão chamada my_extension:
  • mysql-test/t/my_new_test.test
  • mysql-test/r/my_new_test.result

Convenções de Arquivos de Teste

Um teste de extensão típico instala a extensão, executa SQL e desinstala:
Quando a saída do seu teste incluir caminhos do diretório temporário do executor de testes, adicione esta diretiva dentro do seu arquivo .test para normalizá-los — sem ela, os resultados registrados contêm caminhos absolutos que quebram em outras máquinas:

Passos para Adicionar um Teste

  1. Crie o arquivo .test no diretório mysql-test/t/ da sua extensão.
  2. Crie um arquivo .result vazio no diretório mysql-test/r/ da sua extensão.
  3. Execute o teste com --record para gerar a saída esperada:
  4. Verifique a saída no arquivo .result gerado para garantir que ela corresponde às suas expectativas.

Depurando Testes

Se um teste falhar, o framework de testes fornece logs detalhados.
  • Saída do teste: Verifique mysql-test/var/log/mysqltest.log (combinado) ou mysql-test/var/log/<test_name>/ (diretório por teste).
  • Log de erros do servidor: Verifique mysql-test/var/log/mysqld.1.err. Mensagens de log específicas do VillageSQL (emitidas via LogVSQL()) só aparecem quando o servidor é executado com --log-error-verbosity=3.
  • Diff: O framework gera um diff entre a saída real e o arquivo .result esperado.
Para executar um teste com informações extras de depuração:

Veja Também