C 版测试与自检
make -j4 && make test # 构建 + 单元 / HTTP 集成 / CLI 冒烟make STATIC=1 test # 用 musl 静态工具链重跑全部测试make test 调用 tests/run.sh,在真实 HTTP 监听下运行集成测试。测试只能在本机架构上跑
(交叉架构会直接报错)。
| 领域 | 用例 |
|---|---|
| 配置解析 | 类型错误、未知键、数组表、端口表达式、CORS / 令牌校验、模板可解析 |
| 黑白名单 | MAC 匹配、端口表达式、模式切换、enabled / full_ban / upnp 标记 |
| 检测器 | 阈值触发、持续告警、结束回收、对端上限、端口上限与淘汰 |
| 状态文件 | PCST v1 读写往返;与 Go 版 internal/state 双向兼容(C 写 → Go 读、Go 写 → C 读) |
| blocker | 引用计数(ban_both 合并 v4/v6)、全 UDP 封禁联动、手动解封 |
| hook 后端 | 占位符替换、v4/v6 双发、全端口 / UPnP 参数 |
| iptables / nftables | 命令拼装(用假命令记录 argv,不触碰真实防火墙) |
| HTTP API | 鉴权、CORS 预检、404 / 405 / 503、/devices /device /peers /dev/memory /reload |
| CLI | --version、--init-config、-T 校验(缺少网卡应失败) |
# 版本(形如 0.0.1-beta.2+<git hash>)./bin/pcdn-detect --version
# 生成模板(目录须存在,不覆盖)mkdir -p /tmp/pcdn-check./bin/pcdn-detect --init-config /tmp/pcdn-check
# 只校验配置,0 = 通过./bin/pcdn-detect -T -i br-lan -c /tmp/pcdn-check/pcdn-detect.toml
# 帮助./bin/pcdn-detect -hfile bin/pcdn-detect # static-pie linked(或 PIE=0 时 statically linked)readelf -l bin/pcdn-detect | grep INTERP # 无输出readelf -S bin/pcdn-detect | grep debug # 主程序无 .debug_* 段readelf -p .gnu_debuglink bin/pcdn-detect # 显示 pcdn-detect.debug静态产物只依赖内核 ABI,可在本机用 file / readelf 判断,无需目标机 libc。部署到路由器后:
scp bin/pcdn-detect root@router:/usr/bin/pcdn-detectssh root@router '/usr/bin/pcdn-detect --version'--version正常输出,且与下载的版本号一致;- 启动日志出现「开始监听网卡 …」与「抓包缓冲:frame=…」;
[log] level = "info"时logread -e pcdn-detect能看到告警与封禁记录;- 启用 HTTP 后
curl -s localhost:8080/api/v1/health与/dev/memory正常返回; - 封禁链路:确认
iptables -S PCDN_DETECT或nft list ruleset中出现条目,行为结束后消失。
提交 PR 前阅读 CONTRIBUTING.md。完整流程与对齐上游的要求见开发总览 与
C 内核开发。提交即视为同意 CLA.md,且每个提交需要 Signed-off-by 签署行:
git commit -s -m "capture: ..."