rwadurian/backend/mpc-system/tests/docker-compose.test.yml

174 lines
4.9 KiB
YAML

version: '3.8'
services:
# PostgreSQL for testing
postgres-test:
image: postgres:15-alpine
environment:
POSTGRES_USER: mpc_user
POSTGRES_PASSWORD: mpc_password
POSTGRES_DB: mpc_system_test
ports:
- "5433:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mpc_user -d mpc_system_test"]
interval: 5s
timeout: 5s
retries: 5
# Redis for testing
redis-test:
image: redis:7-alpine
ports:
- "6380:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
# RabbitMQ for testing
rabbitmq-test:
image: rabbitmq:3-management-alpine
environment:
RABBITMQ_DEFAULT_USER: mpc_user
RABBITMQ_DEFAULT_PASS: mpc_password
ports:
- "5673:5672"
- "15673:15672"
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "check_running"]
interval: 10s
timeout: 10s
retries: 5
# Database migration service
migrate:
image: migrate/migrate
depends_on:
postgres-test:
condition: service_healthy
volumes:
- ../migrations:/migrations
command: [
"-path", "/migrations",
"-database", "postgres://mpc_user:mpc_password@postgres-test:5432/mpc_system_test?sslmode=disable",
"up"
]
# Integration test runner
integration-tests:
build:
context: ..
dockerfile: tests/Dockerfile.test
depends_on:
postgres-test:
condition: service_healthy
redis-test:
condition: service_healthy
rabbitmq-test:
condition: service_healthy
migrate:
condition: service_completed_successfully
environment:
TEST_DATABASE_URL: postgres://mpc_user:mpc_password@postgres-test:5432/mpc_system_test?sslmode=disable
TEST_REDIS_URL: redis-test:6379
TEST_RABBITMQ_URL: amqp://mpc_user:mpc_password@rabbitmq-test:5672/
command: ["go", "test", "-v", "-tags=integration", "./tests/integration/..."]
# E2E test services
session-coordinator-test:
build:
context: ..
dockerfile: services/session-coordinator/Dockerfile
depends_on:
postgres-test:
condition: service_healthy
redis-test:
condition: service_healthy
rabbitmq-test:
condition: service_healthy
migrate:
condition: service_completed_successfully
environment:
MPC_DATABASE_HOST: postgres-test
MPC_DATABASE_PORT: 5432
MPC_DATABASE_USER: mpc_user
MPC_DATABASE_PASSWORD: mpc_password
MPC_DATABASE_DBNAME: mpc_system_test
MPC_DATABASE_SSLMODE: disable
MPC_REDIS_HOST: redis-test
MPC_REDIS_PORT: 6379
MPC_RABBITMQ_HOST: rabbitmq-test
MPC_RABBITMQ_PORT: 5672
MPC_RABBITMQ_USER: mpc_user
MPC_RABBITMQ_PASSWORD: mpc_password
MPC_SERVER_HTTP_PORT: 8080
MPC_SERVER_GRPC_PORT: 9090
MPC_SERVER_ENVIRONMENT: test
ports:
- "8080:8080"
- "9090:9090"
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:8080/health"]
interval: 5s
timeout: 5s
retries: 10
account-service-test:
build:
context: ..
dockerfile: services/account/Dockerfile
depends_on:
postgres-test:
condition: service_healthy
redis-test:
condition: service_healthy
rabbitmq-test:
condition: service_healthy
migrate:
condition: service_completed_successfully
environment:
MPC_DATABASE_HOST: postgres-test
MPC_DATABASE_PORT: 5432
MPC_DATABASE_USER: mpc_user
MPC_DATABASE_PASSWORD: mpc_password
MPC_DATABASE_DBNAME: mpc_system_test
MPC_DATABASE_SSLMODE: disable
MPC_REDIS_HOST: redis-test
MPC_REDIS_PORT: 6379
MPC_RABBITMQ_HOST: rabbitmq-test
MPC_RABBITMQ_PORT: 5672
MPC_RABBITMQ_USER: mpc_user
MPC_RABBITMQ_PASSWORD: mpc_password
MPC_SERVER_HTTP_PORT: 8083
MPC_SERVER_ENVIRONMENT: test
MPC_JWT_SECRET_KEY: test-secret-key-for-jwt-tokens!!
MPC_JWT_ISSUER: mpc-test
ports:
- "8083:8083"
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:8083/health"]
interval: 5s
timeout: 5s
retries: 10
# E2E test runner
e2e-tests:
build:
context: ..
dockerfile: tests/Dockerfile.test
depends_on:
session-coordinator-test:
condition: service_healthy
account-service-test:
condition: service_healthy
environment:
SESSION_COORDINATOR_URL: http://session-coordinator-test:8080
ACCOUNT_SERVICE_URL: http://account-service-test:8083
command: ["go", "test", "-v", "-tags=e2e", "./tests/e2e/..."]
networks:
default:
name: mpc-test-network