557 lines
9.8 KiB
Markdown
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!**
|