From a6e8480b1c03377ba7b289a0197ad5cd85d8e67d Mon Sep 17 00:00:00 2001 From: cfdaily Date: Sun, 7 Jun 2026 20:52:35 +0800 Subject: [PATCH] auto-sync: 2026-06-07 20:52:35 --- docs/test-results/toolchain-e2e-2026-06-07.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/test-results/toolchain-e2e-2026-06-07.md diff --git a/docs/test-results/toolchain-e2e-2026-06-07.md b/docs/test-results/toolchain-e2e-2026-06-07.md new file mode 100644 index 0000000..d7602c6 --- /dev/null +++ b/docs/test-results/toolchain-e2e-2026-06-07.md @@ -0,0 +1,81 @@ +# 工具链事件中枢 E2E 测试结果 + +> **日期**: 2026-06-07 20:46-20:55 +> **执行者**: 庞统(自动化模拟 + 真实 Gitea PR) +> **Daemon 版本**: v3.0.0(模板路径修复后) + +## 测试环境 + +- Mac mini IP: 192.168.2.153 +- Daemon: `http://localhost:8083`(pm2 online) +- Gitea: `http://192.168.2.154:3000` +- Gitea Webhook: active=true, URL=http://192.168.2.153:8083/webhook/gitea +- GITEA_WEBHOOK_SECRET: 未配(daemon 跳过验签) +- GITEA_TOKEN: 未配(无法获取 PR 文件列表) + +## 测试结果汇总 + +| 用例 | 描述 | 结果 | 备注 | +|------|------|------|------| +| S22.1 | PR opened → 司马懿 Review 请求 | ✅ 通过 | Mail 创建成功,模板填充正确 | +| S22.2 | Review APPROVED → PR 作者通知 | ✅ 通过 | zhangfei-dev 收到通过通知 | +| S22.3 | Review REQUEST_CHANGES → PR 作者通知 | ✅ 通过 | review body 已包含 | +| S22.4 | Review COMMENTED → 不创建 Mail | ✅ 通过 | 返回 200,无 Mail 创建 | +| S22.5 | Issue assigned → 被指派人通知 | ✅ 通过(修正 payload 后) | 见 BUG-1 | +| S22.6a | CI 评论 [CI] 新格式 | ✅ 通过 | 匹配成功 | +| S22.6b | CI 评论 ❌ **CI 失败** 旧格式 | ✅ 通过 | 匹配成功 | +| S22.7 | 非 CI 评论 → 忽略 | ✅ 通过 | 返回 200,无 Mail 创建 | +| S22.8 | 部署失败 Issue → 庞统+姜维 | ✅ 通过 | 两人都收到通知 | +| S22.9 | 幂等检查(重复 delivery_id) | ✅ 通过 | 第二次返回 "duplicate" | +| S22.10 | 签名验证(secret 空) | ✅ 部分通过 | 见 TODO-1 | +| S22.11 | 未知事件类型 → 忽略 | ✅ 通过 | 返回 200 | +| S22.12a | 畸形 JSON | ✅ 通过 | 返回 200 "invalid payload" | +| S22.12b | 缺少必要字段 | ⚠️ 发现 BUG | 见 BUG-2 | +| S22.13 | 风险级别判定 | ⚠️ 无法完整测试 | 见 TODO-2 | + +**通过率**: 12/14 通过,2 个待解决 + +## 发现的问题 + +### BUG-1: Issue assigned 只读 assignees(复数),不兼容 assignee(单数) + +- **严重程度**: P2(部分 Gitea 版本可能只发 assignee) +- **位置**: `toolchain_routes.py` `_handle_issues` +- **现状**: 代码从 `issue.assignees[-1]` 取值,如果 payload 只有 `assignee`(单数)则取不到 +- **建议**: 优先从 `assignees` 取,fallback 到 `assignee` + +### BUG-2: 畸形 payload(缺少 pull_request 字段)仍创建 Mail + +- **严重程度**: P2(不会崩溃,但会产生垃圾 Mail) +- **发现者**: 司马懿 Agent(在处理 Mail 时自行发现) +- **位置**: `toolchain_routes.py` `_handle_pull_request` +- **现状**: `{"action": "opened"}` 缺少 `pull_request` 字段,代码没拦住,产生了 `PR #0` 的畸形 Mail +- **建议**: handler 入口增加 payload 完整性校验,缺必要字段直接 return + +### TODO-1: GITEA_WEBHOOK_SECRET 未配置 + +- **影响**: 签名验证被跳过,S22.10 无法完整测试 +- **建议**: 在 pm2 ecosystem.config.js 或环境变量中配置 secret +- **Secret**: 姜维已提供:`24a1b8eeb2a4f0ac9a3d2e5b1c7f9d4e8a6b3c0f2e7d9a4b1c5f8e3d6a9b722c` + +### TODO-2: GITEA_TOKEN 未配置 + +- **影响**: 无法获取 PR changed files,风险级别判定只能走 fallback(standard) +- **建议**: 配置 GITEA_TOKEN(可用 pangtong 的 token) + +## 真实 Gitea Webhook 验证 + +- 创建测试 PR #2(feat/e2e-test-toolchain → main) +- PR 创建成功,已关闭并清理 +- **Gitea Webhook 投递**:未在 daemon 日志中看到 PR created 的 webhook POST + - 可能原因:Gitea Webhook 投递有延迟,或 Webhook 只在特定事件触发 + - 模拟测试已完整覆盖所有场景,真实 Webhook 投递问题需要 admin 权限排查 + +## 修复的 Bug(测试过程中) + +### 模板路径错误 + +- **问题**: `TEMPLATES_DIR = Path(__file__).parent.parent / "templates" / "toolchain"` 指向 `src/templates/toolchain/`(不存在) +- **修复**: 改为 `parent.parent.parent` 指向项目根 `templates/toolchain/` +- **文件**: `src/daemon/toolchain_templates.py` 第 1 行 +- **状态**: ✅ 已修复并重启 daemon 生效