# ============================================================================== # TEST & QUALITY (unit tests, lint, format) # ============================================================================== .PHONY: test test-tmt test-tmt-backend test-tmt-frontend test-tmt-services lint fmt status test-web test-backend-api test-stream-server .PHONY: test-e2e test-e2e-critical .PHONY: load-test-smoke load-test-backend load-test-all .PHONY: lint-web lint-backend-api 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_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 (all vital tests) @$(ECHO_CMD) "${BLUE}🧪 Running TMT Vital Pipeline...${NC}" @command -v tmt >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ tmt is missing! Install with 'pip install tmt'${NC}"; exit 1; } @tmt --root tmt run plan --name /vital test-tmt-backend: ## [MID] Run TMT Backend tests only @$(ECHO_CMD) "${BLUE}🧪 Running TMT Backend...${NC}" @command -v tmt >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ tmt is missing! Install with 'pip install tmt'${NC}"; exit 1; } @tmt --root tmt run plan --name /vital-backend test-tmt-frontend: ## [MID] Run TMT Frontend tests only @$(ECHO_CMD) "${BLUE}🧪 Running TMT Frontend...${NC}" @command -v tmt >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ tmt is missing! Install with 'pip install tmt'${NC}"; exit 1; } @tmt --root tmt run plan --name /vital-frontend test-tmt-services: ## [MID] Run TMT Rust Services tests only @$(ECHO_CMD) "${BLUE}🧪 Running TMT Services...${NC}" @command -v tmt >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ tmt is missing! Install with 'pip install tmt'${NC}"; exit 1; } @tmt --root tmt run plan --name /vital-services test-web: ## [MID] Run Web tests only @$(ECHO_CMD) "${BLUE}🧪 Running Web tests...${NC}" @(cd $(ROOT)/$(SERVICE_DIR_web) && npm run test -- --run) test-e2e: ## [MID] Run Playwright E2E tests (Chromium, requires backend running) @$(ECHO_CMD) "${BLUE}🧪 Running E2E tests (Playwright)...${NC}" @(cd $(ROOT)/tests/e2e && npx playwright test --project=chromium) test-e2e-critical: ## [MID] Run only @critical E2E tests (fast smoke) @$(ECHO_CMD) "${BLUE}🧪 Running Critical E2E tests...${NC}" @(cd $(ROOT)/tests/e2e && npx playwright test --project=chromium --grep "@critical") 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-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_stream-server) && cargo clippy -- -D warnings) @(cd $(ROOT)/$(SERVICE_DIR_backend-api) && golangci-lint run ./...) @(cd $(ROOT)/$(SERVICE_DIR_web) && npm run lint) 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-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_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) @k6 run $(ROOT)/loadtests/stream/http.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_stream-server) -i :$(PORT_web) 2>/dev/null | grep LISTEN || echo "No apps listening."