feat: adiciona teste end-to-end local via make e2e - #212
Open
ricardosilva86 wants to merge 2 commits into
Open
ricardosilva86 wants to merge 2 commits into
ricardosilva86 wants to merge 2 commits into
Conversation
Hoje `go test ./...` nao prova quase nada: so internal/templates tem testes, e todo o internal/k8s (~630 linhas que falam com o cluster) nunca e executado. A suite passa mesmo com `girus create cluster` quebrado. O `make e2e` sobe um cluster Kind de verdade, implanta o Girus, valida backend, frontend e templates, e remove o cluster no final. Etapas: pre-requisitos, build, create cluster, espera dos deployments, validacao dos templates, comandos do CLI, resultado. Detalhes que valem registro: - Usa `make build`, nunca `go build`. Sem os ldflags, common.Version fica vazio, IsNewerVersion() le como 0.0.0 e o create cluster abre o prompt de auto-atualizacao. Com stdin fechado o ReadString devolve "", que cmd/create.go:78 trata como SIM: o teste atualizaria o proprio binario e sairia com os.Exit(0), passando sem testar nada. - Compara ConfigMaps aplicados com templates efetivamente carregados pelo backend. Divergencia de schema falha em silencio -- o ConfigMap existe, o backend descarta o lab e nada aparece na UI (issues #209 e #210). - Nao executa `girus stop`/`girus start`: o start nao restabelece o port-forward (issues #202 e #208), entao falharia sempre. Incluir como teste de regressao quando a correcao entrar. - Recusa rodar se ja existir um cluster 'girus' (E2E_FORCE=1 ignora) e remove o cluster via trap mesmo em caso de falha (E2E_KEEP=1 mantem). Na primeira execucao o teste encontrou um bug real: 26 ConfigMaps aplicados, 25 carregados. O backend registrava Erro ao desserializar template lab.yaml: yaml: line 202: did not find expected '-' indicator Causa: aspas duplas nao escapadas em torno de "dorme" na copia embutida de lab_11_linux_comandos-basicos.yaml, que e a que vai dentro do binario e e aplicada por `girus create cluster`. O PR #198 corrige apenas a copia em labs/, entao a versao embutida seguia quebrada. Corrigido aqui. Verificacao local (Kind v0.33.0, Docker 29.2.1): make e2e E2E PASSOU -- 26 laboratorios aplicados, 26 carregados pelo backend Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Duas mudancas recentes entraram sem documentacao: - o requisito de Go 1.26, que veio junto com o bump do k8s.io para 0.37.0 - o alvo `make e2e`, adicionado neste mesmo PR Adicionado em README.md e README.es.md: - Nota de pre-requisito de Go 1.26 na secao de compilacao, explicando de onde vem a exigencia e que CI e Dockerfile seguem a mesma versao. - Secao "Testes" separando as duas camadas: os testes unitarios, que sao rapidos mas hoje so cobrem internal/templates, e o `make e2e`, que e o unico que exercita o caminho completo do CLI. Fica explicito que `go test ./...` passa mesmo com o `create cluster` quebrado, para ninguem confundir suite verde com binario funcional. - Pre-requisitos do e2e, as sete etapas validadas, as variaveis E2E_KEEP e E2E_FORCE, a saida esperada e os tempos de execucao. - Aviso para usar `make build` em vez de `go build` sem flags: sem os ldflags o binario reporta `dev` e o create cluster abre o prompt de auto-atualizacao. - Recomendacao de rodar `make e2e` antes de publicar uma release. O README.es.md tambem ganhou a secao de gerenciamento de dependencias, que existia so na versao em portugues. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Por que
go test ./...hoje não prova quase nada:O único teste existente valida que os manifests embutidos são YAML válido no nível externo. Nada exercita
create cluster,list labsoustatus. A suíte passa mesmo que ogirus create clusteresteja completamente quebrado.O que entra
make e2esobe um cluster Kind de verdade, implanta o Girus, valida e remove o cluster. Sete etapas: pré-requisitos, build, criação do cluster, espera dos deployments, validação dos templates, comandos do CLI, resultado.Decisões que valem registro
Usa
make build, nuncago build. Sem os ldflags,common.Versionfica vazio,IsNewerVersion()lê como0.0.0e ocreate clusterabre o prompt de auto-atualização. Com stdin fechado oReadStringdevolve"", quecmd/create.go:78trata como SIM — o teste atualizaria o próprio binário e sairia comos.Exit(0), passando verde sem testar nada.Compara ConfigMaps aplicados com templates efetivamente carregados. Divergência de schema falha em silêncio: o ConfigMap existe, o backend descarta o lab, e nada aparece na UI. É exatamente o padrão das issues #209 e #210.
Não executa
girus stop/girus start. Ostartnão restabelece o port-forward (issues #202 e #208), então o passo falharia sempre. Há um comentário no script para incluí-lo como teste de regressão quando a correção entrar.Segurança: recusa rodar se já existir um cluster
girus(useE2E_FORCE=1), e remove o cluster viatrapmesmo em caso de falha (useE2E_KEEP=1para manter).Bug real encontrado na primeira execução
O teste reportou 26 ConfigMaps aplicados e apenas 25 carregados. O log do backend:
Causa: aspas duplas não escapadas em torno de
"dorme"eminternal/templates/manifests/lab_11_linux_comandos-basicos.yaml. Essa é a cópia embutida no binário, aplicada porgirus create clusterem toda instalação nova.O PR #198 corrige apenas
labs/linux_comandos-basicos/lab.yaml. A cópia embutida é byte-idêntica e seguia quebrada. Corrigida aqui — as duas precisam do mesmo ajuste.Verificação
Kind v0.33.0, Docker 29.2.1, macOS arm64:
Antes da correção do lab:
AVISO: 26 ConfigMaps aplicados, mas so 25 carregados. Ciclo completo leva ~2 minutos com as imagens em cache.Próximo passo sugerido
Promover isso para um workflow no CI, rodando em PRs que tocam
cmd/ouinternal/k8s/. Vale esperar o PR #172 (flag--tag) para fixar a tag das imagens: hoje o teste depende delinuxtips/girus-backend:latest, que não é controlado por este repositório — um push ruim deixaria o e2e vermelho sem nada de errado no código (foi o que aconteceu na issue #171).🤖 Generated with Claude Code