Files
singbox_glue/docs/testing.md
T

2.7 KiB
Raw Permalink Blame History

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

Уровни

  1. Unit: URI, policy, version, renderer, redaction.
  2. Failure injection: candidate rejection, restart failure, URI/config rollback, idempotency и manual rollback swap.
  3. Real binary: sing-box 1.13.19 check на Linux и schema/format validation на Windows.
  4. Privileged Linux: TUN, nftables, systemd и локальный HTTP connectivity healthcheck.
  5. Canary: DNS A change без endpoint CIDR и credential rotation.
  6. Reboot: guard ordering, persisted config и path watcher.

Unit tests

make check

Тест с реальным бинарником включается явно:

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

Он предварительно проверяет exact version, with_quic и with_gvisor. Windows-бинарник не может создать Linux auto-redirect и поэтому выполняет format полной схемы; обязательный check остаётся в Linux CI/Incus.

Privileged acceptance

В disposable Incus-контейнере с двумя NIC:

  1. установить sing-box 1.13.19 и пакет;
  2. применить test URI;
  3. проверить таблицу 2022 и marks;
  4. подтвердить, что eth1 -> eth0 отклоняется без sing-box;
  5. подтвердить TCP/UDP/DNS через TUN при рабочем HY2;
  6. сломать credential и проверить автоматический rollback;
  7. изменить A-запись endpoint, не меняя URI/config;
  8. перезагрузить контейнер и повторить doctor.

Отдельный dependency failure test выполняется только в disposable Incus:

  1. остановить sing-box и guard;
  2. временно задать в test policy отсутствующий upstream interface;
  3. убедиться, что systemctl start sing-box.service завершается ошибкой из-за неуспешного guard;
  4. восстановить policy и подтвердить успешный совместный запуск;
  5. проверить drop-in командой systemd-analyze verify и содержимое собранного Debian-пакета через dpkg-deb -c.

Локальный HTTPS healthcheck не заменяет запросы DNS/TCP/UDP с реального workload за eth1. При остановленном sing-box такой workload не должен получить прямой доступ через eth0.

Production A-запись не используется для эксперимента: нужен staging hostname.