Files
aiops/TDD_PLAN.md
T
attacker 68a954c1c5 feat(k8s): M6 编辑器基础设施 + 基本信息 Tab + YAML编辑器
- DeploymentWorkload: 三模式切换(查看/编辑/YAML编辑)+ EditModeContainer Tab 导航系统
- DeploymentEditBasic: 新增基本信息 Tab — replicas/labels/annotations/selector 编辑
- YamlViewer: 升级为 CodeMirror 6(语法高亮+行号+折叠+括号匹配),新增 inline 内联模式
- DeploymentDetailPage: mode 类型扩展为 view|edit|yaml
- 路由 :mode 参数自动支持 yaml 值
- M7-M9 Tab 预留占位(容器信息/存储/高级/服务)
2026-06-23 05:15:42 +08:00

179 lines
5.8 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.
# TDD 验证计划 — K8s 管理功能
> 每个模块实现前先写验证用例,实现后必须跑通,不能只编译通过。
## 通用验证流程
```bash
# 1. 重建后端镜像
cd /srv/aiops && docker-compose up -d --build backend
# 2. 等待 healthy
sleep 10 && docker ps --format '{{.Names}} {{.Status}}' | grep aiops-backend
# 3. 获取 JWT Token
TOKEN=$(curl -s http://127.0.0.1:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"CHANGE_ME"}' | jq -r '.data.token')
# 4. 验证 API
curl -s http://127.0.0.1:8080/api/v1/kubernetes-clusters \
-H "Authorization: Bearer $TOKEN" | jq '.'
```
---
## M1: SyncCluster metrics 采集
### 验证用例
```bash
# U1: 同步前 — 确认 DB 里 cpu_usage 为 0
docker exec aiops-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" aiops \
-e "SELECT name, cpu_usage, memory_usage FROM kubernetes_nodes WHERE cluster_id=1"
# U2: 触发同步
curl -X POST http://127.0.0.1:8080/api/v1/kubernetes-clusters/1/sync \
-H "Authorization: Bearer $TOKEN"
# U3: 同步后 — 确认 cpu_usage/memory_usage 非零
docker exec aiops-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" aiops \
-e "SELECT name, cpu_usage, memory_usage FROM kubernetes_nodes WHERE cluster_id=1"
# 期望: cpu_usage > 0 AND memory_usage > 0
# U4: 集群详情页 API — 无硬编码
curl -s http://127.0.0.1:8080/api/v1/kubernetes-clusters/1 \
-H "Authorization: Bearer $TOKEN" | jq '.data.node_count, .data.pod_count'
# 期望: node_count=2, pod_count>0
# U5: 前端构建无报错
cd /srv/aiops/frontend && npm run build 2>&1 | tail -5
# 期望: vite build 成功
```
### 通过标准
- [x] U1: 同步前 cpu_usage=0
- [x] U2: 同步 API 200
- [x] U3: 同步后 cpu_usage>0
- [x] U4: 集群计数正确
- [x] U5: 前端构建成功
---
## M2: Pod Metrics
### 验证用例
```bash
# 同步后 Pod 列表含 CPU/内存
curl -s "http://127.0.0.1:8080/api/v1/kubernetes-clusters/1/pods" \
-H "Authorization: Bearer ***" | jq '.data[0]'
# 期望: 含 cpu_usage_m / mem_usage_mi 字段
```
### 通过标准
- [x] Pod 列表 API 返回 cpu_usage_m / mem_usage_mi 字段
- [x] 前端 Pod 列表表格显示 CPU/内存列(KubernetesWorkloads + NamespaceResourcePage)
- [x] 17 个 Pod 全部有真实 metrics 数据
---
## M3: Pod 文件上传
### 验证用例
```bash
# 上传文件
echo "test content" > /tmp/test-upload.txt
curl -X POST "http://127.0.0.1:8080/api/v1/kubernetes/1/namespace/devops/pods/aiops-xxx/files/upload?path=/tmp&container=aiops" \
-H "Authorization: Bearer ***" \
-F "file=@/tmp/test-upload.txt"
# 期望: 200 + 文件出现在列表中
```
### 通过标准
- [x] 上传 API 返回 200 + verify 字段匹配文件大小
- [x] 文件列表 (ls) 能看到上传的文件
- [x] ExecInPod 使用 WebSocket channel.k8s.io 协议(不再用 SPDY raw HTTP)
- [x] BusyBox ls 解析兼容(Mon DD HH:MM 格式)
---
## M5: Deployment 暂停更新 + CI/CD 集成
### 验证用例
```bash
# U1: 暂停前 — 确认 paused=false
curl -s "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments" \
-H "Authorization: Bearer $TOKEN" | jq '.data[] | select(.name=="redis") | .paused'
# 期望: false
# U2: 暂停 Deployment
curl -X POST "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments/redis/pause" \
-H "Authorization: Bearer $TOKEN"
# 期望: code=200, msg="已暂停滚动更新"
# U3: 暂停后 — 确认 paused=true
curl -s "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments" \
-H "Authorization: Bearer $TOKEN" | jq '.data[] | select(.name=="redis") | .paused'
# 期望: true
# U4: 恢复 Deployment
curl -X POST "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments/redis/resume" \
-H "Authorization: Bearer $TOKEN"
# 期望: code=200, msg="已恢复滚动更新"
# U5: 恢复后 — 确认 paused=false
curl -s "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments" \
-H "Authorization: Bearer $TOKEN" | jq '.data[] | select(.name=="redis") | .paused'
# 期望: false
```
### 通过标准
- [x] U1: 暂停前 paused=false
- [x] U2: pause API 返回 200
- [x] U3: 暂停后 paused=true
- [x] U4: resume API 返回 200
- [x] U5: 恢复后 paused=false
- [x] ID 路由 + Kuboard code 路由均可用
- [x] 前端操作菜单显示「暂停更新/恢复更新」动态切换
- [x] CI/CD 发布按钮可跳转到流水线页面
---
## M6: 编辑器基础设施 + 基本信息 Tab + YAML编辑器
### 验证用例
```bash
# U1: 三模式路由 SPA fallback 200(非 301/404)
curl -s -o /dev/null -w "%{http_code}" \
"http://127.0.0.1/kubernetes/prod-cluster/namespace/devops/workload/yaml/Deployment/redis"
# 期望: 200
# U2: YAML GET API — CodeMirror 编辑器数据源
curl -s "http://127.0.0.1:8080/api/v1/kubernetes/prod-cluster/namespace/devops/deployments/redis/yaml" \
-H "Authorization: Bearer *** | head -5
# 期望: apiVersion: apps/v1 / kind: Deployment / metadata:
# U3: 前端构建含 CodeMirror 依赖
curl -s http://127.0.0.1/ | grep -oP 'index-[A-Za-z0-9]+\.js'
# 期望: 新 hash(每次构建变化)
# U4: TypeScript 编译无错误
cd frontend && npx tsc --noEmit
# 期望: 退出码 0
# U5: Vite 生产构建成功
cd frontend && npm run build 2>&1 | tail -3
# 期望: built in Ns
```
### 通过标准
- [x] U1: yaml 路由 SPA fallback 返回 200
- [x] U2: YAML API 返回有效 K8s manifest(apiVersion/kind/metadata 齐全)
- [x] U3: 前端 bundle 含 CodeMirror(codemirror 关键字在 JS chunk 中)
- [x] U4: TypeScript 零编译错误
- [x] U5: Vite 生产构建成功
- [x] YamlViewer 支持弹窗模式 + 内联模式(inline prop)
- [x] DeploymentEditBasic 可编辑 replicas/labels/annotations/selector
- [x] 编辑模式 Tab 导航系统就绪(基本信息可用 + M7-M9 预留)