72 lines
3.7 KiB
Markdown
72 lines
3.7 KiB
Markdown
# Тестирование
|
||
|
||
## Уровни
|
||
|
||
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:
|
||
|
||
```bash
|
||
make check
|
||
```
|
||
|
||
На Windows с isolated Python:
|
||
|
||
```powershell
|
||
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
|
||
|
||
```bash
|
||
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.
|