test(integration): add e2e testing suite and infrastructure

Introduces a comprehensive integration testing setup and local development environment.

Changes include:
- Add `docker-compose.yml` for local stack orchestration.
- Add `docker-compose.integration.yml` for the integration test environment.
- Create `mock-upstream` service to simulate external LLM provider responses.
- Implement Go-based end-to-end tests verifying control plane configuration and data plane routing.
- Add `integration_test.sh` for quick connectivity verification.
This commit is contained in:
zenfun
2025-12-02 14:47:01 +08:00
parent aa57af874c
commit f56f9215d8
7 changed files with 393 additions and 13 deletions

View File

@@ -0,0 +1,80 @@
version: '3.8'
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ezapi
ports:
- "5434:5432"
volumes:
- pgdata-int:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
ports:
- "6380:6379"
volumes:
- redisdata-int:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
mock-upstream:
build:
context: ./integration/mock-upstream
dockerfile: Dockerfile
ports:
- "8082:8082"
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:8082/health"]
interval: 5s
timeout: 5s
retries: 5
ez-api:
build:
context: .
dockerfile: Dockerfile
environment:
EZ_API_PORT: 8080
EZ_PG_DSN: host=postgres user=postgres password=postgres dbname=ezapi port=5432 sslmode=disable
EZ_REDIS_ADDR: redis:6379
ports:
- "8080:8080"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
balancer:
build:
context: ../balancer
dockerfile: Dockerfile
environment:
EZ_BALANCER_PORT: 8081
EZ_REDIS_ADDR: redis:6379
EZ_BALANCER_REFRESH_SECONDS: 2
ports:
- "8081:8081"
depends_on:
redis:
condition: service_healthy
ez-api:
condition: service_started
mock-upstream:
condition: service_healthy
volumes:
pgdata-int:
redisdata-int: