Files
singbox_glue/docs/testing.md
T

4.4 KiB
Raw Blame History

Тестирование

Уровни

  1. Unit: URI, policy, version, renderer, redaction и metadata.
  2. Failure injection: candidate rejection, restart failure, URI/config restore, unmanaged config, corrupted/legacy last-good.
  3. Packaging: MPL-2.0, exact dependency, cross-release rejection, same-release reinstall и postinst guard.
  4. Real binary: официальный sing-box 1.14.0 для Gecko и Salamander configs.
  5. Privileged Linux: TUN, systemd, nftables, routing и DNS.
  6. HY2XS acceptance: Gecko TCP/UDP/DNS, failures, reconnect и reboot.

Unit tests

На Linux:

make check

На Windows с isolated Python:

E:\python-31312\python.exe -c "import sys,unittest; sys.path[:0]=[r'F:\projects\singbox_glue',r'F:\projects\singbox_glue\src']; s=unittest.defaultTestLoader.discover('tests',top_level_dir='.'); r=unittest.TextTestRunner(verbosity=2).run(s); raise SystemExit(not r.wasSuccessful())"

Real binary

SING_BOX_1_14_0=/usr/bin/sing-box make test

Тест сначала проверяет exact version/tags. На Linux выполняется check; на Windows — schema decoding через format, поскольку Windows binary не может создать Linux auto-redirect.

Privileged Debian acceptance

В disposable Incus/VM с двумя NIC проверить:

  1. собрать package и выполнить чистую установку;
  2. повторно установить ровно 0.2.0 поверх согласованного состояния;
  3. подтвердить отказ переходов 0.1.x → 0.2.0 и другой release → 0.2.0;
  4. применить Gecko config и подтвердить отсутствие last-good после первого apply;
  5. проверить table 2022, rule 9000/32768, marks и NFQUEUE 100;
  6. до установления HY2 разрешить hostname endpoint через bootstrap-dns по eth0, без recursion в 172.19.0.2;
  7. подтвердить DoH remote-dns через hy2-out;
  8. с хоста выполнить getent hosts example.com, dig @8.8.8.8 example.com и dig +tcp @8.8.8.8 example.com;
  9. повторить оба dig с workload за eth1 и через tcpdump/nft counters подтвердить отсутствие реального TCP/UDP 53 через eth0;
  10. при наличии systemd-resolved проверить DNS и route-only domain ~. для tun-sb0; отдельно повторить запуск без доступного resolvectl;
  11. проверить TCP/UDP и внешний VPN IP с workload за eth1;
  12. подтвердить отсутствие прямого WAN при остановленном sing-box;
  13. проверить credential failure и same-release rollback;
  14. проверить отказ legacy/mismatched metadata и unmanaged identical config;
  15. проверить смену A-record, reconnect, stop/start и reboot recovery;
  16. после stop убедиться в очистке sing-box nftables/resolved state, после start — в полном восстановлении.

Server-side Gecko E2E выполняется с production-compatible HY2XS. Salamander E2E выполняется на disposable server, явно настроенном в compatibility-режим; это не автоматический fallback и не default новой production-установки.

Platform hijack не обслуживает DNS, направленный на локальный LAN IP gateway. Такой сценарий допустим только после добавления отдельного DNS listener и не входит в acceptance версии 0.2.0.

Зафиксированный production acceptance

15 сентября 2026 года версия 0.2.0 прошла финальный прогон с exact sing-box 1.14.0 и production-compatible HY2XS/Hysteria 2.12.2 endpoint в режиме Gecko. Подтверждены gateway и forwarded-client E2E, DNS/HTTPS, idempotent no-op sync, recovery после запуска сервиса и отсутствие прямого WAN при остановленном sing-box. Полный состав и фактические результаты: финальная приёмка 0.2.0.