测试套件
改动任何 C 代码都要跑最小验证;改到哪一块,按表挑相关套件。所有套件都只用可观测轮询 (等日志里出现某一行),不用 sleep。
18 支套件(0.14.0 全绿)
| 套件 | 断言数 | 钉住什么 |
|---|---|---|
phase1-e2e.sh | 12 | 阶段 1 独立客户端(与模块同一份协议层):握手 → 注册 → 注入 → 优雅关闭 |
phase2-e2e.sh | 60 | 注入 nginx 原生 HTTP 链:方法/路径/头/体逐字节、return 与 proxy_pass、gzip、trailer、上传背压、写错误语义 |
phase3-websocket.sh | 27 | WebSocket 升级、双向裸字节(4 MiB 背压)、边缘 RST 收尾、裸 TCP 丢弃 |
phase3-multiworker.sh | 12 | 多 worker:每 worker 一条隧道、connIndex、独立记账 |
phase3-heartbeat.sh | 15 | 心跳判死、退避重连、隧道重建 |
phase4-stress.sh | 25 | 并发压测、kill -9 worker 后自动重连、RSS/fd 稳态 |
phase4-writerr.sh / phase4-writerr-release.sh | 16 / 18 | 写侧错误语义;连接与配额释放(读侧先发现的收尾) |
phase5-backpressure.sh | 20 | 接收侧背压第 1/2 层、入队即还连接级的可观测差异 |
phase4-stall.sh | 32 | 第 3 层停滞淘汰、第 4 层预算淘汰、第 5 层拒新流与「长期不回落」 |
phase4-asan.sh | 31 | ASan 插桩(停滞那套按 29 项口径) |
quick-align.sh | 19 | 快速隧道 provisioning 与 cloudflared 的逐帧逐头对齐 + 8 条错误路径 + 超时 |
quick-e2e.sh | 16 | 无凭据启动 → 申请 → 注册 → 注入 → cfd-quick-url → 多 worker / 互斥 / 韧性 |
multi-tunnel.sh | 28 | 多隧道块、端口映射、多对一并发、失败隔离、纯端口歧义、多 worker、扁平兼容 |
remote-config.sh | 54 | 远程配置下发(版本门、应答逐字节、内层 err、外层 502、END_STREAM 语义)+ 本地优先 + host_override + 混合模式 |
inject-source-addr.sh | 36 | 注入来源地址:默认值、配 192.0.2.1、IPv6、realip 采纳、$server_addr 不变、多隧道继承 |
token-creds.sh | 38 | token 解析层(含用真 cloudflared 二进制逐 token 交叉核对接受/拒绝) |
token-tunnel.sh | 29 | token 的端到端:两条写法都注册成功、坏 token fail-soft、多隧道两个账号 |
合计 400+ 条断言。
怎么跑
bash
cd /root/DSH/nginx-cfd
source env/activate.sh
# 最小验证(改任何 C 代码)
NGX_MODULES_ONLY=1 ./build/nginx-build.sh && make -C nginx-src/nginx-1.26.3 modules
./build/phase2-e2e.sh 7878 18453 18090 19091
(cd phase1/cfd-tunnel && make test)
# 全套(一个入口跑完 18 支)
bash .scratch/merge/regress0140.sh改到哪一块跑什么
| 改动面 | 至少跑 |
|---|---|
| 凭据 / token 解析 | token-creds.sh + token-tunnel.sh |
| 注入器 / 头序列化 | phase2-e2e.sh + phase3-websocket.sh |
| 背压 | phase5-backpressure.sh + phase4-stall.sh (+ phase4-asan.sh) |
| 远程配置 | remote-config.sh |
| 多隧道 | multi-tunnel.sh |
| 快速隧道 | quick-align.sh + quick-e2e.sh |
| 来源地址 / realip | inject-source-addr.sh |
| 内存安全 | phase4-asan.sh |
交付物级复验
每次交付都拿包内那份 .so 配 Debian 官方 nginx 再跑一遍端到端(60/60),证明「跑回归的那份 字节」就是「装进系统的那份字节」。命令见 交付物与指纹。