Files
awg-dash/deploy/docker-compose.test.yml
T
embeddevio 4aa69132ad netns: nsenter в topology.sh, netns_common и документации (#56)
- topology.sh: ns_exec для всех ip -n <ns> и ip netns exec, коды 0/1/3/4.
- netns_common.py: ns_exec_mode()/ns_exec_direct(), addrs/links/link_is_up через ns_sh.
- docker-compose.test.yml: проброс AWG_NS_EXEC_MODE в netns-сервис.
- tests/netns/README.md: режимы входа в netns, коды возврата, новый pitfall.

Refs #21, Refs #15, Refs #56
2026-10-28 21:30:22 +03:00

74 lines
2.7 KiB
YAML

# Тестовый стенд 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}
# В контейнере `ip netns exec` падает (mount of /sys, issue #56) — харнесс
# сам переключается на nsenter --net; переменная позволяет форсировать режим.
AWG_NS_EXEC_MODE: ${AWG_NS_EXEC_MODE:-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: