Commit Graph

76 Commits

Author SHA1 Message Date
embeddevio cc3640f13c docs(api): OpenAPI 3.1 контракт API v1 как source of truth (Refs #19)
contract-openapi / openapi-contract (push) Has been cancelled
contract-openapi / ts-client-is-current (push) Has been cancelled
- docs/openapi.yaml: все эндпоинты ТЗ, единый формат ошибок {code,message,details},
  writeOnly для private_key/preshared_key/password, WS-кадры metrics/stream.
- requirements-contract.txt: зависимости контрактных тестов (jsonschema,
  openapi-spec-validator, PyYAML) до мержа каркаса PR #47.
- .gitea/workflows/contract-openapi.yml: lint + контрактный тест + проверка
  актуальности сгенерированного TS-клиента.
2026-10-22 00:20:36 +03:00
embeddevio f5e8272c3a docs(#21): отчёт о фактических прогонах гейтов и AC на 192.168.1.147 (HEAD 7af9caba)
Refs #21 Refs #15
2026-10-22 00:16:00 +03:00
embeddevio 7af9cabad3 docs(#21): в шапке compose описан авто-режим dev-up до #31
Refs #21
2026-10-22 00:13:07 +03:00
embeddevio 73e23bc3e4 fix(#21): verify-dev-stand не даёт ложный [fail] после --force-recreate (перезапрос id)
Refs #21 Refs #15
2026-10-22 00:13:07 +03:00
embeddevio 8e0d76147e deploy(#21): dev-up поднимает health-стенд до #31; --build не форсируется без deploy/Dockerfile
Refs #21 Refs #15
2026-10-22 00:13:02 +03:00
embeddevio b8f715d38a docs(#21): runbook dev-стенда — быстрый старт, таблица AC, зависимости и откат
Refs #21
Refs #15
2026-10-21 23:50:19 +03:00
embeddevio 59c3ad4918 test(#21): тесты инвариантов compose, Make-цели стенда и обновлённый deploy/README
- tests/deploy/test_compose_manifests.py — 7 тестов на compose-инварианты
  (без Docker, только PyYAML) — готовы к включению в CI (#17);
- Makefile: dev-up/dev-up-stub/dev-down/dev-logs/dev-verify/dev-verify-stub/
  dev-reset/test-netns/test-netns-keep/test-netns-ci/test-manifests/lint-shell,
  переменные HOST_DIR, DASH_PORT, NETNS_ARGS; dev-up без docker падает с внятным
  сообщением, а не трейсбеком;
- deploy/README.md — таблица артефактов и быстрые команды стенда.

Refs #21
Refs #15
2026-10-21 23:50:01 +03:00
embeddevio 7d46df5ede test(#21): проверка AC на Docker-хосте и статические инварианты compose
- verify-dev-stand.sh (`make dev-verify`): AC-1 (health 200, различает
  api=real/stub), AC-2 (маркеры в /config и /data до и после restart и
  --force-recreate, включая проверку на хосте), проверка монтирований и
  health контейнера, JSON-отчёт; коды 0/1/2/3 — ok/regression/blocked-#31/
  blocked-env;
- tests/deploy/validate_compose.py — проверки без Docker: контейнерный порт
  8080, тома /config и /data, healthcheck /api/v1/health, NET_ADMIN и
  /dev/net/tun, ip_forward, лимит логов, privileged netns-раннер и DEV-ONLY
  заглушка. Флаг --require-dockerfile для интеграционного дерева.

Refs #21
Refs #15
2026-10-21 23:49:43 +03:00
embeddevio da1c750297 feat(#21): dev-стенд — compose-файлы, health-заглушка до #31
- 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
2026-10-21 23:49:11 +03:00
embeddevio 87cf5fe05f test(#21): интеграционные тесты netns-стенда и документация харнесса
- test_netns_stand.py — 8 тестов: топология и линки, policy routing по fwmark,
  правила меток и kill-switch, готовность мока и детектора, доставка handshake
  из LAN и из шлюза с ростом счётчика метки, имитация недоступности провайдера
  (mode=drop), положительный контроль утечки и блокировка при kill-switch.
  Тесты пропускаются вне run.sh, чтобы не падать при случайном pytest-прогоне;
- README.md харнесса — схема топологии, состав файлов, таблица тестов,
  переменные окружения и pitfalls (root/CAP_NET_ADMIN, rp_filter, отсутствие
  nft и ping в alpine-образе).

Refs #21
Refs #15
2026-10-21 23:48:51 +03:00
embeddevio 6de43622fa test(#21): утилиты стенда, раннер с JSON-отчётом и README харнесса
- netns_common.py — обёртки над ip/nft/iptables: проверка netns и линков,
  счётчики правил меток и kill-switch (nft -j и iptables -v -x), чтение
  JSONL-логов мока и детектора, отправка трафика через probe.py;
- run_tests.py — прогон unittest с JSON-отчётом (pytest не нужен: работает
  и на хосте, и в alpine-образе);
- README.md — схема топологии, таблица тестов, переменные окружения и pitfalls
  (root/CAP_NET_ADMIN, rp_filter, отсутствие nft и ping в образе).

Refs #21
Refs #15
2026-10-21 23:48:22 +03:00
embeddevio 18b911d582 test(#21): мок WireGuard-endpoint, детектор утечки и генератор трафика
- mock_wg_endpoint.py — UDP-эндпоинт, повторяющий раскладку сообщений
  WireGuard (initiation 148 байт -> response 92 байта), режимы respond/drop
  переключаются на лету через файл; JSONL-лог для ассертов;
- leak_sink.py — UDP+TCP детектор утечки на 198.51.100.9:9999 внутри netns
  uplink (RFC 5737 TEST-NET-2);
- probe.py — отправка handshake initiation или raw-UDP из указанного netns
  с разбором ответа в JSON. Только stdlib: работает в alpine-образе.

Refs #21
Refs #15
2026-10-21 23:48:00 +03:00
embeddevio 79cbcab397 test(#21): netns-стенд — топология client/gw/uplink, lib и точка входа
Основы харнесса для тестов без реального VPN-провайдера:
- lib.sh — конфигурация стенда (netns, адреса, fwmark/таблицы) и правила
  netfilter с поддержкой nft и iptables (в alpine-образе приложения nft нет);
- topology.sh — up/down/status/killswitch: veth-пары client<->gw<->uplink,
  ip_forward, ip rule fwmark 51820 -> table 51820, метки OUTPUT/FORWARD,
  DROP kill-switch для прямого выхода в «публичную» сеть;
- run.sh — preflight, запуск мока и детектора утечки в netns uplink, прогон
  тестов, снос стенда с проверкой отсутствия остатков.

Refs #21
Refs #15
2026-10-21 23:47:48 +03:00
embeddevio 7e10ffaf8a test(store): репозиторий (аудит по всем сущностям) и персистентность после рестарта (#20) 2026-10-21 23:45:30 +03:00
embeddevio 89e5a5a883 test(store): миграции, аудит, атомарный apply/rollback (#20) 2026-10-21 23:45:06 +03:00
embeddevio 238d39a274 feat(store): репозиторий Store — аудируемые мутации по всем сущностям (#20) 2026-10-21 23:44:03 +03:00
embeddevio 34610b069c feat(store): миграции схемы v1, репозиторий с аудитом, атомарный apply/rollback (#20) 2026-10-21 23:43:45 +03:00
embeddevio c5b06a7ea4 feat(store): SQLite WAL, миграции, валидация, аудит, снимки состояния (#20) 2026-10-21 23:43:14 +03:00
embeddevio 9163265782 feat(store): схемы/модели/ошибки слоя хранения (#20) 2026-10-21 23:42:32 +03:00
embeddevio 1db3824cb4 docs(#16): ADR-007 (web-сервер) и ADR-008 (безопасность) 2026-10-21 23:29:36 +03:00
embeddevio d9cad87fc8 docs(#16): ADR-005 (DNS) и ADR-006 (состояние) 2026-10-21 23:29:29 +03:00
embeddevio 63a2df893d docs(#16): ADR-003 (reconcile) и ADR-004 (GeoIP провайдер) 2026-10-21 23:29:24 +03:00
embeddevio 63e653b710 docs(#16): ADR-001, ADR-002, индекс и шаблон ADR 2026-10-21 23:29:18 +03:00
embeddevio 5647d339b1 chore(#16): каркас пакетов backend, тестов и заглушки ui/deploy/tests 2026-10-21 23:28:59 +03:00
embeddevio 63c4fa930d chore(#16): skeleton репозитория — README, Makefile, линтеры, зависимости 2026-10-21 23:28:50 +03:00
embeddevio f7936fa882 Initial commit 2026-10-16 22:45:47 +03:00