diff --git a/deploy/VERIFICATION-21.md b/deploy/VERIFICATION-21.md index 6036225..6835ed2 100644 --- a/deploy/VERIFICATION-21.md +++ b/deploy/VERIFICATION-21.md @@ -217,3 +217,67 @@ make test-netns # netns-харнесс сносит топологию с Порт и stub-оверрайд (см. §4) без изменений: `privileged: true` и `cap_add SYS_MODULE` из `deploy/docker-compose.test.yml` — только DEV/TEST, для staging/prod непригодны. + +## 7. Раунд 3 (ревью PR #53, раунд 2): контракт кодов, env-алиас, сборка без сети + +Дата: 2026-10-28 · Хост: `192.168.1.147` (Debian 13, Docker 29.4.1, compose v5.1.3, kernel 6.17) +Ветка: `feat/21-dev-stand` · Ref: #21, #15, #17, #56 + +Ревью qa-engineer (раунд 2, PR #53 `issuecomment-664`) дало три воспроизводимых замечания: +контракт `0/1/3/4` теряется на уровне make, документированный `AWG_NS_EXEC_MODE` перекрыт +make-алиасом, `make dev-up` падает при сборке без DNS. Все три закрыты правками ниже. + +### 7.1 Что изменено + +| замечание | правка | +|---|---| +| `make test-netns-ci` отдаёт `2` на любом провале → CI #17 не отличит 3/4/1 | новая точка входа `tests/netns/ci.sh`: `docker compose -f deploy/docker-compose.test.yml run --rm -T netns`, код контейнера возвращается как есть (`2` у неё = сломан вызов/нет docker/образа). `make test-netns-ci` делегирует в неё, в комментарии таргета и в §6.1 зафиксировано «make → 2» | +| `AWG_NS_EXEC_MODE=ip make test-netns-ci` игнорировался (`Makefile:19` `NETNS_EXEC_MODE ?= auto` + `:117`) | `NETNS_EXEC_MODE ?= $(if $(AWG_NS_EXEC_MODE),$(AWG_NS_EXEC_MODE),auto)` — документированное имя имеет приоритет, make-алиас остался для совместимости; README и `dev-stand.md` приведены к факту | +| `make dev-up` форсит `--build` и падает без DNS | `DEV_SKIP_BUILD=1` → `up -d --no-build`; `DEV_UP_BUILD` переопределяем (`?=`) и по-прежнему принимается из командной строки (`DEV_UP_BUILD=`); строка в `dev-stand.md` (быстрый старт + pitfalls + таблица переменных) | + +### 7.2 Реальные прогоны (дерево сверено по git-blob-SHA, см. §7.3) + +| прогон | команда | код | что видно в выводе | +|---|---|---|---| +| CI-точка входа, зелёный | `bash tests/netns/ci.sh` | **0** | `[ci] образ=awg-dash:dev режим netns=auto`, `вход в netns: nsenter`, `Ran 8 tests`, `8 ok`, `[ ok ] топология снесена`, `[ci][ ok ]` | +| make-путь, зелёный | `make test-netns-ci` | **0** | те же 8 ok через `ci.sh` | +| код 4 (форс нерабочего режима) | `AWG_NS_EXEC_MODE=ip bash tests/netns/ci.sh` | **4** | `[ci] … режим netns=ip`, `mount of /sys failed` → `[warn] код 255 → 4` | +| код 3 (нет прав на netns) | `AWG_NS_PRIVILEGED=0 bash tests/netns/ci.sh` | **3** | `[blocked] не удалось создать netns — нет CAP_NET_ADMIN/SYS_ADMIN`, `[ci][blocked]` | +| код 1 (упавшие тесты) | синтетический падающий тест в `tests/netns/` → `bash tests/netns/ci.sh` | **1** | `Ran 9 tests`, `FAILED (failures=1)`, `8 ok, 1 fail` (тест удалён после прогона) | +| контракт make при коде 4 | `AWG_NS_EXEC_MODE=ip make test-netns-ci` | **2** (контейнер 4) | `[ci] … режим netns=ip` — **env больше не перекрывается**; `make: *** [Makefile:133: test-netns-ci] Error 4` | +| контракт make при коде 1 | синтетический падающий тест → `make test-netns-ci` | **2** (контейнер 1) | `make: *** [Makefile:133: test-netns-ci] Error 1` | +| AC-1 | `make dev-up DEV_SKIP_BUILD=1` + `curl :8180/api/v1/health` | **0**, HTTP **200** | `up -d --no-build`, контейнер `Up (healthy)`, ответ `"stub": true` | +| AC-1 со сборкой (кеш тёплый) | `make dev-up` (без `DEV_SKIP_BUILD`) | **0** | `222` шагов `CACHED`, `Image awg-dash:dev Built`, контейнер пересоздан и `healthy` — на холодном кеше этот путь требует DNS, поэтому кноб нужен | +| AC-2 | `make dev-verify VERIFY_ARGS="--no-up --skip-build"` | **0** | маркеры `/config` и `/data` пережили `restart` и `--force-recreate`, видны на хосте (bind mount) | +| гейт покрытия | `make test-deploy` | **0** | `51 passed`, `Required test coverage of 70% reached. Total coverage: 98.86%` (`TOTAL 176 строк, 2 miss`) | +| манифесты | `make test-manifests` | **0** | `validate-compose: ok (1 предупреждений)` — предупреждение про `deploy/Dockerfile` (до мержа #18) | +| shellcheck | `make lint-shell` | **0** | проверен и новый `tests/netns/ci.sh` | +| уборка | `ip netns list`; `docker ps -a --filter name=awg-dash-test` | — | пусто, контейнеров после прогонов не осталось | + +Логи прогонов на стенд-хосте: `/tmp/r3_a.log` … `/tmp/r3_m.log` +(`a` — зелёный `ci.sh`, `b` — код 4, `c` — код 3, `d` — make при коде 4, `e`/`f` — код 1 через `ci.sh`/make, +`g` — `make test-netns-ci`, `h` — `dev-up DEV_SKIP_BUILD=1` + health, `i` — AC-2, `j` — `test-deploy`, +`k` — `test-manifests`, `l` — `lint-shell`, `m` — `dev-up` со сборкой). + +### 7.3 Блобы: файлы на стенд-хосте == дерево ветки + +| файл | git blob | +|---|---| +| `Makefile` | `55c3ea5c98c7980c9bc3fcec8483d1140e670b2e` | +| `tests/netns/ci.sh` | `561ca3976ad3749fbde79b8d163e007bace145de` | +| `tests/netns/README.md` | `a4642f845f38fca1da0019af7e91d95be9e4d97c` | +| `deploy/dev-stand.md` | `60495f7cd8eba10b40dc9aef469bea210b50e8e1` | +| `deploy/VERIFICATION-21.md` | этот файл (блоб меняется этим же коммитом) | +| остальные файлы стенда | без изменений с раунда 2 (§0) | + +### 7.4 Что осталось + +* **CI green (DoD)** — за задачей #17: у репозитория появился runner (контейнер + `gitea-runner-awg-repo`, запуски runs 22–31), но workflow, покрывающего ветку #21, в `main` + ещё нет, поэтому все гейты выше прогнаны вручную. Команды для workflow: + `bash tests/netns/ci.sh`, `make test-deploy`, `make test-manifests`, `make lint-shell` — + они уже отдают нужные коды без make-обёртки. +* Merge в `main` и любой prod/staging-деплой — за TechLead (ADVISORY): автор ревью не мержит. +* `verify-dev-stand.sh` после `--force-recreate` печатает статус до перехода в `healthy`, + но AC-проверки при этом ждут health (`wait_health 20`) и прогон возвращает `0` — на вердикт + не влияет.