- docker-compose.dev.yml: отдельный project awg-dash-dev, порт 8080 в контейнере
(наружу AWG_DASH_PORT, по умолчанию 8180 — 8080 занят на dev-хосте), bind mount
/opt/awg-dash-dev/{config,data} -> /config,/data, healthcheck /api/v1/health,
NET_ADMIN/NET_RAW/SYS_MODULE, /dev/net/tun, ip_forward, лимит логов;
- docker-compose.stub.yml + api_stub.py — DEV-ONLY заглушка health: AC-1 требует
FastAPI-каркаса (#31), до него проверяем плумбинг стенда без обмана отчёта
(в ответе ивно стоит "stub": true);
- docker-compose.test.yml: привилегированный netns-раннер (CAP_SYS_ADMIN нужен
для `ip netns add`) + сервис app для API-тестов.
Refs #21
Refs #15
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# Тестовый стенд awg-dash (задача #21): netns-топология + мок WireGuard-endpoint.
|
||||
#
|
||||
# Использование:
|
||||
# docker compose -f deploy/docker-compose.test.yml run --rm netns # прогон стенда
|
||||
# docker compose -f deploy/docker-compose.test.yml run --rm netns --keep-topology
|
||||
# docker compose -f deploy/docker-compose.test.yml up -d app # приложение для API-тестов
|
||||
# (make test-netns-ci — обёртка над первым вызовом)
|
||||
#
|
||||
# Контейнеру `netns` нужен --privileged: внутри создаются сетевые namespace
|
||||
# (`ip netns add`) и veth-пары, для этого требуются CAP_SYS_ADMIN + CAP_NET_ADMIN.
|
||||
# Репозиторий монтируется только для чтения; артефакты пишутся в /artifacts и /tmp.
|
||||
|
||||
name: ${COMPOSE_PROJECT_NAME:-awg-dash-test}
|
||||
|
||||
services:
|
||||
netns:
|
||||
image: ${AWG_DASH_IMAGE:-awg-dash:dev}
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: ${AWG_DASH_DOCKERFILE:-deploy/Dockerfile}
|
||||
container_name: awg-dash-test-netns
|
||||
privileged: true
|
||||
working_dir: /repo
|
||||
entrypoint: ["/bin/bash", "/repo/tests/netns/run.sh"]
|
||||
command: ["--report", "/artifacts/netns-report.json"]
|
||||
volumes:
|
||||
- ..:/repo:ro
|
||||
- ${AWG_DASH_TEST_ARTIFACTS:-./artifacts}:/artifacts
|
||||
environment:
|
||||
AWG_NETNS_WORKDIR: /tmp/awg-netns
|
||||
AWG_NETNS_PREFIX: ${AWG_NETNS_PREFIX:-awgt21}
|
||||
# nft в образе приложения нет — там iptables (см. tests/netns/README.md)
|
||||
AWG_FW_BACKEND: ${AWG_FW_BACKEND:-auto}
|
||||
tmpfs:
|
||||
- /tmp:mode=1777
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
|
||||
app:
|
||||
image: ${AWG_DASH_IMAGE:-awg-dash:dev}
|
||||
container_name: awg-dash-test-app
|
||||
restart: "no"
|
||||
volumes:
|
||||
- awg-dash-test-config:/config
|
||||
- awg-dash-test-data:/data
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- NET_RAW
|
||||
- SYS_MODULE
|
||||
environment:
|
||||
AWG_CONFIG_DIR: /config
|
||||
AWG_DATA_DIR: /data
|
||||
AWG_API_HOST: 0.0.0.0
|
||||
AWG_API_PORT: "8080"
|
||||
AWG_TEST_STAND: "1"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8080/api/v1/health >/dev/null || exit 1"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
start_period: 20s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
awg-dash-test-config:
|
||||
awg-dash-test-data:
|
||||
Reference in New Issue
Block a user