6.7 KiB
6.7 KiB
Testing and acceptance
Цель документа
Зафиксировать checklist для новой двухслойной схемы.
A. Builder layer tests
Проверяем
- builder запускается на Debian 13 amd64 build host
- итоговый пакет собирается без target-side шагов
- bundled HY2XS admin реально входит в пакет
- package metadata / build id присутствуют
- compiled Bun/TypeScript orchestrator artifact присутствует
- в пакет не попадает build-мусор
- builder сам доставляет отсутствующие build-зависимости
- builder проверяет версии Go/Bun/Node.js/pnpm
- builder пишет версии toolchain в metadata
B. Target install tests
На чистом Debian 13 проверяем
- пакет запускается без ручной сборки на сервере
- Hysteria2 скачивается с official upstream
- bundled HY2XS admin раскладывается локально из пакета
- создаются нужные каталоги
- создаются systemd unit-файлы
- создаются
hy2xs.envиpost-install.envс правами0600 root:root - baseline firewall применяется корректно через staged mode
- SSH остаётся доступным
reconfigure --dry-runвыводит план измененийreconfigure --applyприменяет изменения и проходит smoke
C. Runtime tests
hysteria-serveractivehy2xs-adminactive- Hysteria слушает только IPv4 (
0.0.0.0:<udp_port>) - HY2XS admin слушает ожидаемый
HY2XS_UI_BIND_HOST:<ui_port> - тестовый совместимый клиент подключается
- идёт реальный трафик
- лимит 50/50 Mbps соблюдается при согласованной клиентской конфигурации
- reboot не ломает baseline
- Hysteria2 управляется systemd unit, а не внутренним updater'ом admin panel
- нет IPv6 listen (
[::]) для Hysteria/HY2XS admin trafficStats.secretне равенJWT_SECRET- bootstrap admin secret существует и имеет
0600 trafficStatsAPI: корректный secret принимает запрос, неверный secret отклоняется- TLS mode в
config.yamlсоответствует runtime env (acme|file|self_signed_dev) - при
HY2XS_TLS_MODE=acmeвconfig.yamlвыставленacme.typeизHY2XS_ACME_TYPE - direct
hysteria2://node URL в API/QR формируется поHY2XS_PUBLIC_HOST+HY2XS_PUBLIC_PORT; subscription delivery endpoint отключён в baseline и не входит в acceptance nft -c -f /etc/nftables.confпроходит после apply- пароль admin и
con_passне перезаписываются при рестартеhy2xs-admin - остановка/рестарт UI не останавливает
hysteria-server - traffic accounting/kick ориентируются на systemd status, а не на SQLite
HYSTERIA2_ENABLE /etc/hysteria/config.yamlимеет0640 hysteria:hy2xs-adminhy2xs-adminможет читать/etc/hysteria/config.yaml, но не может писать
D. Negative tests
- не Debian 13
- порт уже занят
- старое конфликтующее состояние уже существует
- домен / SNI заданы некорректно
- bundled UI отсутствует в пакете
- Hysteria upstream недоступен
- firewall применился частично
- install flow прерван посередине
- попытка использовать
HY2XS_IPV6_ENABLED=true HY2XS_PUBLIC_HOST=0.0.0.0
E. Fix20 production matrix (обязательные сценарии)
-
Clean Debian 13 minimal:
- только SSH, без ручной установки зависимостей;
- default
/etc/nftables.confstub; - install проходит полностью;
doctor/statusпоказывают рабочее состояние.
-
Non-systemd container:
- fail-fast до destructive шагов;
- диагностическое сообщение с причиной capability/systemd.
-
Foreign nftables:
- при
HY2XS_FIREWALL_MODE=managedinstall/reconfigure блокируются; - при
HY2XS_FIREWALL_MODE=takeoverсоздаются backup/rollback guard и apply проходит.
- при
-
Rollback guard cleanup:
- после успешного apply/smoke не остаются
hy2xs-fw-rollback-*.timer/.service.
- после успешного apply/smoke не остаются
-
Partial install + repair:
- состояние
install-stateфиксирует промежуточную фазу; repairзавершает граф доinstalled=true.
- состояние
-
AAAA при IPv4-only:
- policy строго валидируется preflight;
- soft warning path не используется в production baseline.
-
Slow-start admin readiness:
- install не падает на race после restart;
- readiness waiters дожидаются listener/healthz.
Acceptance criteria
Система принимается, если:
- production builder на Debian 13 amd64 выдаёт переносимый install package
- target server не выполняет build step
- Hysteria2 получена из official upstream
- UI поставлен из bundled fork
post-install.envотражает фактическое deploy-состояние- оркестратор зафиксирован как Bun/TypeScript stack и поставляется как готовый install-артефакт
- оркестратор не требует standalone update / rollback / uninstall subcommands
- bounded rollback в install/reconfigure корректно отрабатывает failure-сценарии firewall/systemd/config/smoke
- Telegram/access layer не требуется для прохождения install acceptance
- отсутствует production path для port hopping
- UI не запускается от root
- клиентские endpoint не зависят от request
Host/hostname - production build verify падает, если
config/hy2xs.envсодержит placeholder-значения - production build verify падает при dirty git tree (кроме
ALLOW_DIRTY_BUILD=true) - metadata содержит
source_git_commit,dirty_tree,build_profile=production