services: # Test Nginx Proxy enclava-nginx-test: image: nginx:alpine container_name: enclava-nginx-test ports: - "3005:80" # Different port from main app volumes: - ./nginx/nginx.test.conf:/etc/nginx/nginx.conf:ro - nginx-test-logs:/var/log/nginx depends_on: - enclava-backend-test networks: - enclava-test-network healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 # Test PostgreSQL Database enclava-postgres-test: image: postgres:15-alpine container_name: enclava-postgres-test environment: POSTGRES_USER: enclava_user POSTGRES_PASSWORD: enclava_pass POSTGRES_DB: enclava_test_db POSTGRES_HOST_AUTH_METHOD: trust ports: - "5435:5432" # Different port from main database volumes: - postgres-test-data:/var/lib/postgresql/data networks: - enclava-test-network healthcheck: test: ["CMD-SHELL", "pg_isready -U enclava_user -d enclava_test_db"] interval: 10s timeout: 5s retries: 5 # Test Redis Cache enclava-redis-test: image: redis:7-alpine container_name: enclava-redis-test ports: - "6380:6379" # Different port from main Redis networks: - enclava-test-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # Test Qdrant Vector Database enclava-qdrant-test: image: qdrant/qdrant:latest container_name: enclava-qdrant-test ports: - "6334:6333" # Different port from main Qdrant volumes: - qdrant-test-data:/qdrant/storage environment: QDRANT__SERVICE__HTTP_PORT: 6333 QDRANT__SERVICE__GRPC_PORT: 6335 networks: - enclava-test-network healthcheck: test: ["CMD-SHELL", "timeout 5 bash -c ' sh -c " echo 'Waiting for database...' && sleep 5 && echo 'Starting backend server...' && python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload " # Test Frontend Service (simplified - skip for now to focus on backend testing) # enclava-frontend-test: # build: # context: ./frontend # dockerfile: Dockerfile # container_name: enclava-frontend-test # environment: # NODE_ENV: test # BASE_URL: enclava-nginx-test # NEXT_PUBLIC_INTERNAL_API_URL: http://enclava-nginx-test/api-internal # ports: # - "3003:3000" # Different port from main frontend # volumes: # - ./frontend:/app # - ./frontend/tests:/app/tests # - /app/node_modules # Prevent overwriting node_modules # networks: # - enclava-test-network # command: npm run dev # Test Runner Container (for E2E tests) enclava-test-runner: build: context: ./backend dockerfile: Dockerfile container_name: enclava-test-runner environment: # URLs for testing through nginx BASE_URL: http://enclava-nginx-test API_URL: http://enclava-nginx-test/api INTERNAL_API_URL: http://enclava-nginx-test/api-internal # Direct service URLs (for specific tests) BACKEND_URL: http://enclava-backend-test:8000 FRONTEND_URL: http://enclava-frontend-test:3000 # Database connection for test data setup DATABASE_URL: postgresql+asyncpg://enclava_user:enclava_pass@enclava-postgres-test:5432/enclava_test_db # Qdrant connection QDRANT_HOST: enclava-qdrant-test QDRANT_PORT: 6333 # Test configuration PYTEST_ARGS: "-v --tb=short --maxfail=10" TEST_TIMEOUT: 300 volumes: - ./backend/tests:/tests - ./test-reports:/test-reports - ./coverage-reports:/coverage-reports depends_on: - enclava-nginx-test - enclava-backend-test networks: - enclava-test-network command: > sh -c " echo 'Test runner ready. Use docker exec to run tests.' && tail -f /dev/null " networks: enclava-test-network: driver: bridge volumes: postgres-test-data: qdrant-test-data: test-uploads: nginx-test-logs: