57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
# Тестирование
|
||
|
||
## Уровни
|
||
|
||
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
|
||
|
||
```bash
|
||
make check
|
||
```
|
||
|
||
Тест с реальным бинарником включается явно:
|
||
|
||
```bash
|
||
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.
|