# ============================================================================== # TEST & QUALITY (unit tests, lint, format) # ============================================================================== .PHONY: test test-tmt lint fmt status test-web test-backend-api test-stream-server .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 @$(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-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) || 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-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."