# Testing and acceptance ## Цель документа Зафиксировать checklist для новой двухслойной схемы. ## A. Builder layer tests ### Проверяем 1. builder запускается на Debian 12 amd64 build host 2. итоговый пакет собирается без target-side шагов 3. bundled HY2XS admin реально входит в пакет 4. package metadata / build id присутствуют 5. compiled Bun/TypeScript orchestrator artifact присутствует 6. в пакет не попадает build-мусор 7. builder сам доставляет отсутствующие build-зависимости 8. builder проверяет версии Go/Bun/Node.js/pnpm 9. builder пишет версии toolchain в metadata ## B. Target install tests ### На чистом Debian 12 проверяем 1. пакет запускается без ручной сборки на сервере 2. Hysteria2 скачивается с official upstream 3. bundled HY2XS admin раскладывается локально из пакета 4. создаются нужные каталоги 5. создаются systemd unit-файлы 6. создаются `hy2xs.env` и `post-install.env` с правами `0600` 7. baseline firewall применяется корректно через staged mode 8. SSH остаётся доступным 9. `reconfigure --dry-run` выводит план изменений 10. `reconfigure --apply` применяет изменения и проходит smoke ## C. Runtime tests 1. `hysteria-server` active 2. `hy2xs-admin` active 3. Hysteria слушает только IPv4 (`0.0.0.0:`) 4. HY2XS admin слушает ожидаемый `HY2XS_UI_BIND_HOST:` 5. тестовый совместимый клиент подключается 6. идёт реальный трафик 7. лимит 50/50 Mbps соблюдается при согласованной клиентской конфигурации 8. reboot не ломает baseline 9. Hysteria2 управляется systemd unit, а не внутренним updater'ом admin panel 10. нет IPv6 listen (`[::]`) для Hysteria/HY2XS admin 11. `trafficStats.secret` не равен `JWT_SECRET` 12. bootstrap admin secret существует и имеет `0600` 13. `trafficStats` API: корректный secret принимает запрос, неверный secret отклоняется 14. TLS mode в `config.yaml` соответствует runtime env (`acme|file|self_signed_dev`) 15. при `HY2XS_TLS_MODE=acme` в `config.yaml` выставлен `acme.type` из `HY2XS_ACME_TYPE` 16. subscribe/node URL в API/QR формируются по `HY2XS_PUBLIC_HOST` + `HY2XS_PUBLIC_PORT` 15. `nft -c -f /etc/nftables.conf` проходит после apply ## D. Negative tests 1. не Debian 12 2. порт уже занят 3. старое конфликтующее состояние уже существует 4. домен / SNI заданы некорректно 5. bundled UI отсутствует в пакете 6. Hysteria upstream недоступен 7. firewall применился частично 8. install flow прерван посередине 9. попытка использовать `HY2XS_IPV6_ENABLED=true` 10. `HY2XS_PUBLIC_HOST=0.0.0.0` ## Acceptance criteria Система принимается, если: 1. production builder на Debian 12 amd64 выдаёт переносимый install package 2. target server не выполняет build step 3. Hysteria2 получена из official upstream 4. UI поставлен из bundled fork 5. `post-install.env` отражает фактическое deploy-состояние 6. оркестратор зафиксирован как Bun/TypeScript stack и поставляется как готовый install-артефакт 7. оркестратор не требует update / rollback / uninstall логики 8. Telegram/access layer не требуется для прохождения install acceptance 9. отсутствует production path для port hopping 10. UI не запускается от root 11. клиентские endpoint не зависят от request `Host`/`hostname`