Files
sanguo_moziplus_v2/docs/test-results/toolchain-e2e-2026-06-07.md
T
cfdaily a6e8480b1c
Deploy / ci (push) Waiting to run
Deploy / deploy (push) Blocked by required conditions
Deploy / notify-deploy-failure (push) Blocked by required conditions
auto-sync: 2026-06-07 20:52:35
2026-06-07 20:52:35 +08:00

82 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工具链事件中枢 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,风险级别判定只能走 fallbackstandard
- **建议**: 配置 GITEA_TOKEN(可用 pangtong 的 token
## 真实 Gitea Webhook 验证
- 创建测试 PR #2feat/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 生效