Files
aggios.app/1. docs/backend-deployment/TESTING_GUIDE.md

557 lines
9.8 KiB
Markdown

# 🧪 Testing Guide - Backend API
## ✅ Verificações Antes de Começar
```bash
# 1. Verificar Docker
docker --version
docker-compose --version
# 2. Verificar Go (opcional, para desenvolvimento local)
go version
# 3. Verificar espaço em disco
df -h # macOS/Linux
dir C:\ # Windows
# 4. Verificar portas livres
# Necessárias: 80, 443 (Traefik), 8080 (Backend), 5432 (DB), 6379 (Redis), 9000 (MinIO)
```
---
## 🚀 Inicialização do Stack
### Passo 1: Setup Inicial
```bash
cd g:\Projetos\aggios-app
# Copiar .env
cp .env.example .env
# Ajustar valores se necessário
# nano .env ou code .env
```
### Passo 2: Iniciar Containers
```bash
# Windows
.\scripts\start-dev.bat
# Linux/macOS
./scripts/start-dev.sh
# Ou manual
docker-compose up -d
```
### Passo 3: Verificar Status
```bash
# Listar containers
docker-compose ps
# Esperado:
# NAME STATUS
# traefik Up (healthy)
# postgres Up (healthy)
# redis Up (healthy)
# minio Up (healthy)
# backend Up (healthy)
```
### Passo 4: Ver Logs (se houver erro)
```bash
# Ver logs do backend
docker-compose logs -f backend
# Ver logs do postgres
docker-compose logs -f postgres
# Ver todos os logs
docker-compose logs -f
```
---
## 🧪 Testes de Endpoints
### Health Check (SEM autenticação)
```bash
curl -X GET http://localhost:8080/api/health
# Resposta esperada:
{
"status": "up",
"timestamp": 1733376000,
"database": true,
"redis": true,
"minio": true
}
```
**Status esperado**: 200 OK ✅
---
### Teste com Postman/Insomnia
#### 1. Health Check (GET)
```
URL: http://localhost:8080/api/health
Method: GET
Auth: None
Expected: 200 OK
```
#### 2. Login (POST)
```
URL: http://localhost:8080/api/auth/login
Method: POST
Headers:
Content-Type: application/json
Body:
{
"email": "user@example.com",
"password": "Senha123!@#"
}
Expected: 200 OK (com tokens)
```
#### 3. Get Profile (GET com JWT)
```
URL: http://localhost:8080/api/users/me
Method: GET
Auth: Bearer Token
Headers:
Authorization: Bearer {access_token}
Expected: 200 OK ou 401 Unauthorized (token inválido)
```
---
## 🧬 Testes com cURL
### 1. Health Check
```bash
curl -i -X GET http://localhost:8080/api/health
```
**Resposta esperada**:
```
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "up",
"timestamp": 1733376000,
"database": true
}
```
### 2. Login (vai falhar pois não temos implementação)
```bash
curl -i -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "Test123!@#"
}'
```
**Resposta esperada**:
```
HTTP/1.1 200 OK ou 400 Bad Request (conforme implementação)
```
### 3. Testar CORS
```bash
curl -i -X OPTIONS http://localhost:8080/api/health \
-H "Origin: http://localhost:3000" \
-H "Access-Control-Request-Method: GET"
```
**Headers esperados**:
```
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH
```
---
## 🗄️ Testes de Database
### Verificar PostgreSQL
```bash
# Conectar ao container
docker-compose exec postgres psql -U aggios -d aggios_db
# SQL queries:
\dt # listar tables
SELECT * FROM tenants; # listar tenants
SELECT * FROM users; # listar users (vazio inicialmente)
SELECT * FROM refresh_tokens; # listar tokens
\q # sair
```
### Inserir Tenant de Teste
```bash
docker-compose exec postgres psql -U aggios -d aggios_db -c "
INSERT INTO tenants (name, domain, subdomain, is_active)
VALUES ('Test Tenant', 'test.aggios.app', 'test', true)
ON CONFLICT DO NOTHING;
"
```
---
## 💾 Testes de Cache (Redis)
```bash
# Conectar ao Redis
docker-compose exec redis redis-cli -a changeme
# Comandos básicos:
PING # verificar conexão
SET testkey "value" # set key
GET testkey # get value
DEL testkey # delete key
DBSIZE # número de keys
FLUSHDB # limpar database
quit # sair
```
---
## 🗂️ Testes de Storage (MinIO)
### Via Browser
1. Abrir: http://minio-console.localhost
2. Login:
- Usuário: `minioadmin`
- Senha: `changeme` (ou conforme .env)
3. Explorar buckets (deve existir: `aggios`)
### Via Command Line
```bash
# Acessar MinIO dentro do container
docker-compose exec minio mc ls minio
# Criar bucket de teste
docker-compose exec minio mc mb minio/test-bucket
# Listar buckets
docker-compose exec minio mc ls minio
```
---
## 📡 Testes de Traefik
### Dashboard Traefik
```
URL: http://traefik.localhost
Auth: admin / admin (default)
```
Aqui você pode ver:
- ✅ Routes configuradas
- ✅ Middlewares ativas
- ✅ Services
- ✅ Certificados SSL
- ✅ Health dos endpoints
---
## 🧪 Testes de Performance
### Load Testing com Apache Bench
```bash
# 1000 requisições, 10 concorrentes
ab -n 1000 -c 10 http://localhost:8080/api/health
# Esperado:
# - Requests per second: > 100
# - Failed requests: 0
# - Total time: < 10s
```
### Load Testing com wrk
```bash
# Instalar: https://github.com/wg/wrk
wrk -t4 -c100 -d30s http://localhost:8080/api/health
# Esperado:
# Requests/sec: > 500
# Latency avg: < 100ms
```
---
## 🔍 Debugging
### 1. Ver Logs em Tempo Real
```bash
# Backend
docker-compose logs -f backend
# Postgres
docker-compose logs -f postgres
# Redis
docker-compose logs -f redis
# Traefik
docker-compose logs -f traefik
```
### 2. Entrar em Container
```bash
# Backend
docker-compose exec backend /bin/sh
# Postgres
docker-compose exec postgres /bin/bash
# Redis
docker-compose exec redis /bin/sh
```
### 3. Network Debugging
```bash
# Verificar network
docker-compose exec backend ping postgres # Test DB
docker-compose exec backend ping redis # Test Cache
docker-compose exec backend ping minio # Test Storage
```
---
## ✅ Checklist de Validação
### Infrastructure
- [ ] Docker running: `docker --version`
- [ ] docker-compose up: `docker-compose ps` (all UP)
- [ ] All 6 services healthy (postgres, redis, minio, backend, etc)
- [ ] Traefik dashboard acessível
- [ ] MinIO console acessível
### Backend
- [ ] Health endpoint respond: `/api/health` → 200 OK
- [ ] CORS headers corretos
- [ ] JWT middleware carregado
- [ ] Database conexão OK
- [ ] Redis conexão OK
- [ ] MinIO conexão OK
### Database
- [ ] PostgreSQL running
- [ ] Database `aggios_db` existe
- [ ] Tables criadas (users, tenants, refresh_tokens)
- [ ] Indexes criados
- [ ] Can SELECT * FROM tables
### Cache
- [ ] Redis running
- [ ] Redis password funciona
- [ ] PING retorna PONG
- [ ] SET/GET funciona
### Storage
- [ ] MinIO running
- [ ] Console acessível
- [ ] Bucket `aggios` criado
- [ ] Can upload/download files
### API
- [ ] `/api/health` → 200 OK
- [ ] CORS headers presentes
- [ ] Error responses corretas
- [ ] Security headers presentes
---
## 🆘 Troubleshooting
### Backend não conecta em PostgreSQL
```bash
# 1. Verificar se postgres está running
docker-compose logs postgres
# 2. Testar conexão
docker-compose exec postgres pg_isready -U aggios
# 3. Reset database
docker-compose down postgres
docker-compose up -d postgres
docker-compose logs -f postgres
# 4. Esperar ~10s e tentar novamente
```
### Redis não conecta
```bash
# 1. Verificar se está running
docker-compose logs redis
# 2. Testar PING
docker-compose exec redis redis-cli -a changeme ping
# 3. Verificar password em .env
grep REDIS_PASSWORD .env
# 4. Reset
docker-compose restart redis
```
### MinIO não inicia
```bash
# 1. Ver logs
docker-compose logs minio
# 2. Verificar espaço em disco
df -h
# 3. Resetar volume
docker-compose down -v minio
docker-compose up -d minio
```
### Traefik não resolve domínios
```bash
# 1. Editar /etc/hosts (Linux/macOS)
# 127.0.0.1 traefik.localhost
# 127.0.0.1 minio.localhost
# 127.0.0.1 minio-console.localhost
# 2. Windows: C:\Windows\System32\drivers\etc\hosts
# 127.0.0.1 traefik.localhost
# 127.0.0.1 minio.localhost
```
---
## 📊 Métricas Esperadas
### Latência
```
GET /api/health: < 50ms
POST /api/auth/login: 100-200ms (incluindo hash)
SELECT simples: 5-10ms
```
### Throughput
```
Health endpoint: > 1000 req/s
Login endpoint: > 100 req/s
```
### Resource Usage
```
Backend: ~50MB RAM
PostgreSQL: ~100MB RAM
Redis: ~20MB RAM
MinIO: ~50MB RAM
Total: ~220MB RAM
```
---
## 🎓 Exemplo: Testar Fluxo Completo
### Cenário: User signup -> login -> access profile
```bash
# 1. Verificar health
curl http://localhost:8080/api/health
# 2. Tentar login (vai falhar - não implementado)
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@test.com","password":"Test123!@#"}'
# 3. Verificar database
docker-compose exec postgres psql -U aggios -d aggios_db \
-c "SELECT * FROM users;"
# 4. Verificar cache
docker-compose exec redis redis-cli DBSIZE
# 5. Verificar storage
docker-compose exec minio mc ls minio
```
---
## ✨ Próximas Etapas de Teste
Após implementar a autenticação real:
1. **Unit Tests**
```bash
cd backend
go test ./...
go test -v -cover ./...
```
2. **Integration Tests**
```bash
go test -tags=integration ./...
```
3. **Load Tests**
```bash
ab -n 10000 -c 100 https://api.aggios.app/api/health
```
4. **Security Tests**
- OWASP ZAP
- Burp Suite
- SQL injection tests
- XSS tests
---
## 📞 Checklist Final
- [ ] Stack started (`docker-compose ps`)
- [ ] Health endpoint works (200 OK)
- [ ] Database tables created
- [ ] Redis responding
- [ ] MinIO bucket created
- [ ] Traefik dashboard accessible
- [ ] CORS headers correct
- [ ] Error responses formatted
- [ ] Documentation reviewed
- [ ] Ready for development
---
**Status**: ✅ Ready for Testing
**Próximo**: Implementar autenticação real em `backend/internal/api/handlers/auth.go`
🧪 **Bora testar!**