- Remove stale test docs (test2-*, bugs-user-*, bug-report, session-notes) - Add UNRESOLVED-BUGS.md and regression-full-report.md - Update todo.md
8.0 KiB
8.0 KiB
OCDP 回归测试完整报告 (Round 3)
测试日期: 2026-05-14 环境: http://10.6.80.114:18080 集群: k3s v1.28.0 (dbf824f1-9962-4d8e-881e-870c75fdb6f5), k8s (23880994-dfe4-48d0-abc0-b49692cc630a) Harbor: harbor.bwgdi.com (83b823af-873b-457c-912c-9ccde3cb12e6)
代码变更概要 (Commit b88fe24 +)
| Commit | 变更 |
|---|---|
b88fe24 |
fix: real K8s replicas in list API, full Helm values in modify YAML editor |
96d42ee |
fix: scale replicas in response, YAML lineWidth, delta values, modified keys |
4441f58 |
fix: direct K8s scaling, replicas from K8s API, button labels, modify fetch |
49b92e6 |
fix: UI redesign — horizontal instance rows, proper scaling, readable tag cards |
28ecb2e |
feat: scale instances, --reuse-values, values diff, UI redesign, hover animations |
87eaaa5 |
fix: remove per-card Refresh button, consolidate to page-level refresh |
测试结果总览
总评分: 85/100
| 测试领域 | 状态 | 问题数 |
|---|---|---|
| 前端 UI / Launch / Routes | ✅ ALL PASS | 0 |
| API CRUD / 部署生命周期 | ⚠️ 2 issues | 2 |
| 配额执行 | ⚠️ 1 issue (pre-existing) | 1 |
| Values 优先级 / gpuMem | ⚠️ 1 issue | 1 |
| 权限隔离 | ✅ ALL PASS | 0 |
| 安全测试 | ⚠️ 3 issues (pre-existing) | 3 |
| DELETE 行为 | ✅ FIXED | 0 |
| InstanceCard / Scaling UI | ✅ ALL PASS | 0 |
| ModifyModal / Values Diff | ✅ ALL PASS | 0 |
新发现 Bug
🆕 BUG-R3-001: Detail API replicas=0 与 List API 不一致 (High)
| 属性 | 值 |
|---|---|
| 严重度 | P1 (High) |
| 端点 | GET /clusters/{id}/instances/{instance_id} |
| 现象 | List API 返回正确 replicas(如 1, 5),但 Detail API 始终返回 replicas: 0 |
| 根因 | Detail endpoint 从数据库读取实例记录,replicas 字段未同步自 K8s 实时状态 |
| 影响 | 前端依赖 Detail API 的页面(如刷新后详情页)显示错误的副本数 |
| 修复建议 | Detail endpoint 也从 K8s live state 填充 replicas,或确保数据库同步 |
🆕 BUG-R3-002: List API 移除 values 字段
| 属性 | 值 |
|---|---|
| 严重度 | P2 (Medium) |
| 端点 | GET /clusters/{id}/instances |
| 现象 | List API 响应不再包含 values 字段(之前版本有);values 仅在单实例 GET 中返回 |
| 影响 | 依赖 list API values 的测试脚本和前端组件会 break |
| 备注 | 可能是故意的性能优化,但属于 API 行为变更 |
已修复 Bug (验证通过)
| Bug ID | 描述 | 之前状态 | 现在状态 | 验证 |
|---|---|---|---|---|
| BUG-001 | Launch 按钮无反应 | P0 Blocker | ✅ FIXED | 部署端到端成功 |
| BUG-002 | SPA 旧路由空白页 | P0 Blocker | ✅ FIXED | 所有旧路由返回 SPA |
| BUG-003 | DELETE 返回 404 | P1 High | ✅ FIXED | 返回 HTTP 204 |
| BUG-004 | DELETE 空 body | P1 High | ✅ FIXED | HTTP 204 No Content |
| - | InstanceCard 无 scaling UI | New Feature | ✅ ADDED | +/- 按钮 + API 调用 |
| - | ModifyModal values 为空 | Bug | ✅ FIXED | Full Helm values 返回 |
仍未修复的已知问题
| Bug ID | 描述 | 严重度 | 状态 |
|---|---|---|---|
| BUG-013 | 用户枚举(login 错误消息差异) | Medium | 未修复 |
| BUG-014 | 无速率限制 | Medium | 未修复 |
| BUG-015 | Nginx 版本泄露 | Low | 未修复 |
| BUG-016 | CORS: * | Low | 未修复 |
| BUG-017 | 缺少安全响应头 | Low | 未修复 |
| BUG-018 | /health 返回 HTML | Low | 未修复 |
| BUG-005 | Tags 端点 404 | Medium | 未修复 |
| BUG-006 | Namespace 静默覆盖无警告 | Medium | 未修复 |
| BUG-007-009 | Metrics/Stats/Kubeconfig 端点缺失 | Medium | 未修复 |
| BUG-011 | API 响应格式不一致 | Low | 未修复 |
| BUG-012 | /auth/me 空 token 字段 | Low | 未修复 |
| - | API 层配额预检查 | New Feature | 未实现 |
| - | Values 冲突时无警告 | UX | 未修复 |
详细测试结果
1. 前端 UI (test-user-a)
| 测试项 | 结果 |
|---|---|
| 登录页加载 | ✅ HTTP 200, SPA 398 bytes |
| JWT 认证 | ✅ role=user, 10 permissions, quota 字段 |
| 所有页面路由 | ✅ 6 个路由全部返回 398 bytes (非空白) |
| 旧路由重定向 | ✅ /clusters, /registries, /launch, /monitoring 全部返回 SPA |
| Chart Browser | ✅ nginx:22.1.1 可发现,Launch 按钮可用 |
| 部署 Pipeline | ✅ pending-install → deployed (~15s) |
| InstanceCard Scale UI | ✅ +/- 按钮,副本数显示 |
| InstanceCard Actions | ✅ Entries/Diag/Modify/Delete 全部可见 |
| ModifyModal YAML Editor | ✅ full Helm values, lineWidth:0, diff 检测 |
| TagCard UI | ✅ 色标 (chart=blue, image=green), Copy helm pull 命令, LATEST badge |
| DELETE | ✅ HTTP 204 |
2. API 后端 (test-user-b)
| 测试项 | 结果 |
|---|---|
| Login + /auth/me | ✅ 完整 profile (quota, namespace, permissions) |
| Cluster list | ✅ 2 clusters |
| Registry list | ✅ 1 registry (harbor-bwgdi) |
| Repository artifacts | ✅ Harbor API proxy 正常 |
| Cluster health | ✅ k3s healthy, v1.28.0 |
| 部署 nginx (default) | ✅ deployed, replicas=1 |
| 部署 nginx (over-quota) | ⚠️ 接受部署 (API 无预检查) |
| 实例状态轮询 | ✅ ~20s 到达 deployed |
| List API replicas | ✅ 正确显示 1/5 |
| Detail API replicas | ❌ 返回 0 (BUG-R3-001) |
| 实例删除 | ✅ HTTP 204 (BUG-003 FIXED) |
| 缺失端点 | ✅ 正常 404 |
3. Values 优先级 (test-user-c)
| 方法 | 结果 |
|---|---|
| values JSON only | ✅ gpuMem=10000 正确接受 |
| valuesYaml only | ✅ YAML -> JSON 解析正确 |
| 同时提供 (冲突) | ✅ values JSON 覆盖 valuesYaml |
| 冲突警告 | ❌ 无警告(建议添加) |
| 默认值 (空 values) | ✅ 使用 chart 内置 defaults |
| gpuMem=10000 | ✅ 整数 MB scalar 正确 |
| 清理 | ✅ 所有 3 个实例已删除 |
4. 权限隔离
| 测试项 | 结果 |
|---|---|
| Admin lists users | ✅ 10 users |
| test-admin-d lists users | ✅ 10 users (admin role works) |
| test-user-c GET /users | ✅ 403 Forbidden |
| test-user-c POST /auth/register | ✅ 403 Forbidden |
| Cross-tenant deploy (c→b) | ✅ Silent override to ocdp-u-test-c (secure) |
| Deploy into own namespace | ✅ 成功 |
| Instance visibility | ✅ 仅看到自己的实例 |
| Disable user | ✅ 用户被禁用 |
| Disabled user login | ✅ 401 |
| Re-enable user | ✅ 恢复 |
| Self-registration | ✅ 401 (必须认证) |
5. 安全 (回归)
| 测试项 | 结果 |
|---|---|
| 未认证端点 | ✅ 全部 401 |
| JWT 验证 | ✅ 篡改 token 被拒绝 |
| XSS/SQLi | ✅ 安全处理 |
| 敏感数据脱敏 | ✅ creds 显示为 •••••••• |
| 普通用户权限提升 | ✅ 403 blocked |
| 用户枚举 | ❌ 不同错误消息 (未修复) |
| 速率限制 | ❌ 无 429 (未修复) |
| CORS * + 缺失安全头 | ❌ 未修复 |
| Nginx 版本泄露 | ❌ "nginx/1.27.5" (未修复) |
| /auth/me 空 token | ✅ tokens 已正确清空 |
优先修复清单
立即修复 (P0/P1)
- BUG-R3-001: Detail API replicas=0 — 从 K8s live state 填充
- 配额预检查 — POST instances 时验证请求资源 ≤ 用户配额
尽快修复 (P2)
- Values 冲突时添加 API 警告
- Tags/Metrics/Stats/Kubeconfig 端点实现
- Namespace 静默覆盖返回警告
- List API values 字段回归或文档化
安全加固 (P3)
- 登录错误消息统一
- 速率限制
- Nginx 安全头 + 关闭 server_tokens
- CORS 收紧
对比: Round 1 vs Round 3
| 指标 | Round 1 (2026-05-11) | Round 3 (2026-05-14) |
|---|---|---|
| Total Bugs | 18 | 15 (3 fixed, 12 remain, 2 new) |
| P0 Blockers | 2 (Launch, Routes) | 0 |
| P1 High | 2 (DELETE 404, empty body) | 1 (Detail replicas=0) |
| 新功能 | - | Scaling UI, Values Diff, YAML editor |
| 安全漏洞 | 6 | 5 (token fields fixed) |
结论: 代码修改有效,3 个关键 Bug 已修复,新增了 scaling 和 values diff 功能。仍有 12 个已知问题和 2 个新问题待修复。