veza/make/test.mk
senke fef7e7fc7c feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 15:22:48 +01:00

97 lines
4.5 KiB
Makefile

# ==============================================================================
# TEST & QUALITY (unit tests, lint, format)
# ==============================================================================
.PHONY: test test-tmt lint fmt status test-web test-backend-api test-chat-server test-stream-server
.PHONY: load-test-smoke load-test-backend load-test-all
.PHONY: lint-web lint-backend-api lint-chat-server lint-stream-server
# Env vars for backend tests (align with docker-compose ports: Redis 16379, RabbitMQ 15672)
TEST_REDIS_ADDR ?= localhost:$(PORT_REDIS)
TEST_REDIS_URL ?= redis://localhost:$(PORT_REDIS)/15
TEST_RABBITMQ_URL ?= amqp://$(DB_USER):$(DB_PASS)@localhost:$(PORT_RABBITMQ_AMQP)/
test: infra-up ## [MID] Run All Tests (Fastest strategy)
@$(ECHO_CMD) "${BLUE}🧪 Running Tests...${NC}"
@$(ECHO_CMD) " [Go] Unit Tests..."
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && \
REDIS_ADDR=$(TEST_REDIS_ADDR) \
REDIS_TEST_URL=$(TEST_REDIS_URL) \
RABBITMQ_URL=$(TEST_RABBITMQ_URL) \
go test ./... -short)
@$(ECHO_CMD) " [Rust] Unit Tests..."
@(cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo test --lib -q)
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo test --lib -q)
@$(ECHO_CMD) " [Web] Unit Tests..."
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm run test -- --run)
@$(ECHO_CMD) "${GREEN}✅ All tests passed.${NC}"
test-tmt: ## [MID] Run Unified TMT Pipeline
@$(ECHO_CMD) "${BLUE}🧪 Running TMT Pipeline...${NC}"
@command -v tmt >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ tmt is missing! Install with 'pip install tmt'${NC}"; exit 1; }
@tmt run
test-web: ## [MID] Run Web tests only
@$(ECHO_CMD) "${BLUE}🧪 Running Web tests...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm run test -- --run)
test-backend-api: infra-up ## [MID] Run Go backend tests only
@$(ECHO_CMD) "${BLUE}🧪 Running Backend API tests...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && \
REDIS_ADDR=$(TEST_REDIS_ADDR) \
REDIS_TEST_URL=$(TEST_REDIS_URL) \
RABBITMQ_URL=$(TEST_RABBITMQ_URL) \
go test ./... -short)
test-chat-server: ## [MID] Run Chat server tests only
@$(ECHO_CMD) "${BLUE}🧪 Running Chat server tests...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo test --lib -q)
test-stream-server: ## [MID] Run Stream server tests only
@$(ECHO_CMD) "${BLUE}🧪 Running Stream server tests...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo test --lib -q)
lint: ## [MID] Lint everything
@$(ECHO_CMD) "${BLUE}🔍 Linting Codebase...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo clippy -- -D warnings) || true
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo clippy -- -D warnings) || true
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && golangci-lint run ./...) || true
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm run lint) || true
lint-web: ## [MID] Lint web app only
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm run lint)
lint-backend-api: ## [MID] Lint Go backend only
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && golangci-lint run ./...)
lint-chat-server: ## [MID] Lint Chat server only
@(cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo clippy -- -D warnings)
lint-stream-server: ## [MID] Lint Stream server only
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo clippy -- -D warnings)
fmt: ## [MID] Format everything
@$(ECHO_CMD) "${BLUE}✨ Formatting...${NC}"
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && go fmt ./...)
@(cd $(ROOT)/$(SERVICE_DIR_chat-server) && cargo fmt)
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo fmt)
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm run format) || true
load-test-smoke: ## [MID] Run k6 smoke load test
@command -v k6 >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ k6 missing. Install: brew install k6${NC}"; exit 1; }
@k6 run $(ROOT)/loadtests/smoke.js
load-test-backend: ## [MID] Run k6 backend full load test
@command -v k6 >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ k6 missing. Install: brew install k6${NC}"; exit 1; }
@k6 run $(ROOT)/loadtests/backend/full.js
load-test-all: load-test-backend ## [MID] Run all k6 load tests (backend, stream, chat)
@k6 run $(ROOT)/loadtests/stream/http.js || true
@k6 run $(ROOT)/loadtests/chat/websocket.js || true
status: ## [MID] Show system health & stats
@$(ECHO_CMD) "${BOLD}DOCKER STATS:${NC}"
@docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" 2>/dev/null | grep -E "NAME|veza" || echo "No containers running"
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}LOCAL PORTS:${NC}"
@lsof -i :$(PORT_backend-api) -i :$(PORT_chat-server) -i :$(PORT_stream-server) -i :$(PORT_web) 2>/dev/null | grep LISTEN || echo "No apps listening."