# 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)
1. **BUG-R3-001**: Detail API replicas=0 — 从 K8s live state 填充
2. **配额预检查** — POST instances 时验证请求资源 ≤ 用户配额

### 尽快修复 (P2)
3. Values 冲突时添加 API 警告
4. Tags/Metrics/Stats/Kubeconfig 端点实现
5. Namespace 静默覆盖返回警告
6. List API values 字段回归或文档化

### 安全加固 (P3)
7. 登录错误消息统一
8. 速率限制
9. Nginx 安全头 + 关闭 server_tokens
10. 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 个新问题待修复。
