10 Commits

Author SHA1 Message Date
xfy911
a09452b43c FastCGI 服务器集成完成:协议核心、配置解析、请求分发、连接池管理
实现内容:
1. 新增 fcgi_handler.h / fcgi_handler.c 模块:
   - FastCGI 协议核心(BEGIN_REQUEST / PARAMS / STDIN / FCGI_END_REQUEST)
   - CGI 参数构建(REQUEST_METHOD, SCRIPT_NAME, PATH_INFO, QUERY_STRING 等)
   - HTTP 响应解析(Status 头提取、默认 200 回退)
   - 连接池(TCP / Unix Socket 复用)与路由匹配

2. 配置解析扩展(config.c):
   - 支持 --fastcgi-prefix / --fastcgi-target 等命令行参数
   - 支持配置文件的 fastcgi 规则段
   - 最大 4 条规则,可配置 pool_size、timeout_ms、unix_socket

3. 请求处理链集成(server.c):
   - handle_request 中反向代理之后、静态资源之前插入 FastCGI 分发
   - server_context 添加 fcgi_config 字段
   - server_create / server_destroy 中初始化/销毁连接池

4. Makefile 更新:
   - 加入 fcgi_handler.c 编译目标
   - 测试规则同步更新

5. .gitignore 修复:拆分 tests/fixtures/uploads/ 为独立规则

测试:458 单元测试 + 115 集成测试全部通过
关联:Phase 5 应用网关 — FastCGI 服务器集成
2026-06-15 09:28:21 +08:00
xfy911
57948d9dc1 feat: FastCGI 协议核心实现 + 17 项单元测试
- 新增 fastcgi.c/h:FastCGI 1.0 协议客户端实现
  - 记录编码/解码(BEGIN_REQUEST/PARAMS/STDIN/STDOUT/STDERR/END_REQUEST)
  - 名值对(NV)编码(支持短/长长度)
  - 参数管理(SCRIPT_NAME/REQUEST_METHOD 等 CGI 环境变量)
  - 响应解析与状态码提取(Status: 404 → 404)
  - 响应体提取(从 stdout 数据中提取 body)
  - 连接池(预创建连接、获取/归还)
  - 完整请求流程(发送 BeginRequest + Params + Stdin + 接收响应)

- 新增 tests/unit/test_fastcgi.c:17 项单元测试
  - 记录编码/解码
  - 名值对编码(短/长长度)
  - 参数管理
  - 响应解析
  - 状态码/Body 提取
  - 请求初始化

- 更新 Makefile:添加 fastcgi.c 编译规则和 test_fastcgi 测试规则
- 更新 .gitignore:修复 tests/unit/test_* 规则,确保 .c 源文件被跟踪

编译零警告,458 单元测试 + 115 集成测试全部通过 ✓
2026-06-15 08:28:57 +08:00
xfy911
9258d67c08 修复:补充 Makefile 缺失的单元测试规则,清理误跟踪的编译产物
- 新增 test_http3 编译规则(Makefile 中缺少,导致单元测试编译失败)
- 修正 test_sse 编译规则位置(从 #HTTP/3 注释下分离)
- 清理误跟踪的 tests/unit/test_sse 编译二进制(git rm --cached)
- 简化 .gitignore:将逐个列出的测试二进制文件替换为 tests/unit/test_* 通配模式
- 合并 SSE 集成测试的 curl || true 修复(防止 set -e 下超时退出)

编译零警告,451 单元测试 + 115 集成测试全部通过 ✓
2026-06-12 15:43:39 +08:00
xfy911
2568ca6508 chore: 更新 .gitignore,忽略 Phase 4 单元测试二进制
新增 test_grpc / test_http3 / test_load_balance / test_middleware_ext。
2026-06-10 13:46:36 +08:00
xfy911
5d4c78c8cb test(proxy): 新增反向代理模块单元测试(31项)
覆盖:
- proxy_init: 配置初始化清零
- proxy_add_rule: 添加规则、追加后端、参数校验(空值/空字符串)
- proxy_match: 精确匹配、前缀匹配、多规则、NULL参数
- select_backend_sww: 平滑加权轮询(单后端、等权重、不等权重3:1、跳过不健康、全不健康)
- select_backend_sww_all: fallback包含不健康后端
- parse_backend_url: http/https/无scheme/无端口/带路径
- proxy_build_forwarded_path: 无目标路径/有目标路径/空剩余路径
- proxy_update_health: 成功阈值恢复、失败阈值标记、计数器重置
- proxy_pool_init: 默认大小、超上限裁剪、零值回退

编译零警告,190个单元测试 + 106项集成测试全部通过。
2026-06-09 21:10:49 +08:00
xfy911
2dc29d0687 feat(config): 插件配置支持 JSON 数组格式
- 极简 JSON 解析器新增 '[' / ']' token 支持
- plugins 字段可同时兼容字符串和字符串数组
- 向后兼容:单字符串 "plugins.so" 仍有效
- 向前扩展:数组 ["a.so", "b.so"] 支持多插件

修复:
- .gitignore 添加遗漏的 test_websocket 二进制
- Makefile 补全 test_log 单元测试编译规则
- cocoon.json 示例改为数组格式
- test_config.c 新增 3 项 plugins 解析测试(字符串/单数组/多数组)

全部 142 个单元测试 + 68 项集成测试通过 ✓
2026-06-06 09:07:28 +08:00
xfy911
952cc663fe feat(plugin): 实现动态插件系统(.so 加载 + 中间件注册)
新增插件系统:
- plugin.h / plugin.c:dlopen/dlsym 动态加载,最多8个插件
- 插件接口:cocoon_plugin_init / cocoon_plugin_shutdown / cocoon_plugin_version
- 插件可通过 cocoon_middleware_register() 注册中间件参与请求处理
- 命令行:--plugin <path>(可多次指定)
- 配置文件:plugins 字段(字符串,单插件路径)
- server.c 在 server_create 时加载,server_destroy 时逆序卸载
- plugins/hello.c:示例插件,演示中间件注册
- 集成测试:新增插件加载 + 日志验证测试(68项全部通过)
- 单元测试:127个全部通过
- 编译:Makefile 添加 plugin.c 和 -ldl
- .gitignore 排除编译产物和上传目录
2026-06-06 03:13:59 +08:00
xfy911
c036615d58 chore: 添加 test_server 到 gitignore + 更新待办池
- .gitignore: 补充 tests/unit/test_server,避免误提交编译产物
- .cocoon-plan.md: 新增 signal handler cleanup bug 和中文注释完善到待办池
2026-06-04 00:29:31 +08:00
xfy911
19c97ae6a9 test(config): 补充边界与异常路径测试
- test_load_invalid_field_type: 字段类型非法(port 为字符串),验证不 crash
- test_load_log_level_invalid: 非法 log_level 值保持默认 INFO
- test_load_nested_ignored: 嵌套对象——极简解析器返回 false 但不 crash
- test_load_array_ignored: 数组——同上,不 crash 即可
- test_merge_cmdline_null_root_dir: cmdline root_dir 为 NULL 时不覆盖 base
2026-06-04 00:24:29 +08:00
xfy911
84b415470b chore: 初始化项目骨架(README + Makefile + .gitignore) 2026-06-03 16:42:10 +08:00