Initial commit
This commit is contained in:
@@ -0,0 +1,407 @@
|
||||
# DDNS Usage 功能 - 前后端联调测试指南
|
||||
|
||||
**测试时间**: 2026-03-26
|
||||
**服务状态**: ✅ 已启动 http://localhost:9531
|
||||
|
||||
---
|
||||
|
||||
## 🎯 测试目标
|
||||
|
||||
验证 DDNS Usage 管理功能的前后端连通性和完整流程
|
||||
|
||||
---
|
||||
|
||||
## 📋 测试清单
|
||||
|
||||
### **阶段 1: 基础功能验证**
|
||||
|
||||
#### 1.1 登录系统
|
||||
```
|
||||
访问:http://localhost:9531
|
||||
账户:admin
|
||||
密码:admin123 (或你设置的密码)
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 成功登录
|
||||
- [ ] 进入 Dashboard
|
||||
|
||||
---
|
||||
|
||||
#### 1.2 配置 DDNS 服务(前提条件)
|
||||
|
||||
**路径**: 服务市场 → DNS 服务 → 添加服务
|
||||
|
||||
**填写内容**:
|
||||
```
|
||||
服务商:Cloudflare(或其他)
|
||||
名称:公司主域名
|
||||
记录类型:TXT
|
||||
域名:mesh.example.com
|
||||
API Token: cf_xxxxx (你的 Cloudflare Token)
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 保存成功
|
||||
- [ ] 服务列表显示新配置的 DDNS 服务
|
||||
- [ ] 状态正常(可达)
|
||||
|
||||
**API 验证**:
|
||||
```bash
|
||||
curl -X GET http://localhost:9531/api/v1/services?category=dns&type=ddns \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **阶段 2: 组网创建 - 自动生成模式**
|
||||
|
||||
#### 2.1 创建组网并启用 DDNS
|
||||
|
||||
**路径**: 组网管理 → 创建组网
|
||||
|
||||
**步骤 1: 基础信息**
|
||||
```
|
||||
组网名称:办公网络
|
||||
虚拟 IPv4 网段:10.0.0.0/24
|
||||
启用 DDNS 同步:✅ ON
|
||||
DDNS 服务:选择刚才配置的 DDNS 服务
|
||||
前缀模式:✨ 自动生成(默认)
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] DDNS 服务下拉框正确加载
|
||||
- [ ] 选择服务后显示域名信息
|
||||
- [ ] 自动生成模式显示预览信息
|
||||
- [ ] 预览格式:`_meshray.{短 ID}.{域名}`
|
||||
|
||||
**步骤 2-4: 其他配置**
|
||||
```
|
||||
按默认或自定义填写
|
||||
```
|
||||
|
||||
**步骤 5: 确认创建**
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 创建成功提示
|
||||
- [ ] 跳转到组网列表
|
||||
- [ ] 新组网显示在列表中
|
||||
|
||||
---
|
||||
|
||||
#### 2.2 验证数据库记录
|
||||
|
||||
**API 验证**:
|
||||
```bash
|
||||
# 查询组网详情
|
||||
curl -X GET http://localhost:9531/api/v1/networks/{network_id} \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
|
||||
# 期望看到 DDNS 相关字段
|
||||
{
|
||||
"data": {
|
||||
"ddns_enabled": true,
|
||||
"ddns_service_id": "xxx",
|
||||
"ddns_usage_id": "xxx",
|
||||
"ddns_prefix": "EjRWeJyt5uU" # Base64 编码的 ID
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**数据库验证** (可选):
|
||||
```sql
|
||||
-- 查看 Network 表
|
||||
SELECT id, name, ddns_enabled, ddns_service_id, ddns_usage_id, ddns_prefix
|
||||
FROM networks
|
||||
WHERE name = '办公网络';
|
||||
|
||||
-- 查看 DDNSUsage 表
|
||||
SELECT id, provider_id, prefix_mode, record_prefix, description
|
||||
FROM ddns_usages
|
||||
WHERE record_prefix = 'EjRWeJyt5uU';
|
||||
|
||||
-- 查看绑定关系
|
||||
SELECT * FROM network_ddns_bindings
|
||||
WHERE network_id = {network_id};
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] Network 表有 DDNS 字段数据
|
||||
- [ ] DDNSUsage 表有对应记录
|
||||
- [ ] PrefixMode = "auto"
|
||||
- [ ] RecordPrefix = Base64 编码的网络 ID(约 11 字符)
|
||||
- [ ] NetworkDDNSBinding 表有绑定关系
|
||||
|
||||
---
|
||||
|
||||
### **阶段 3: 组网创建 - 自定义模式**
|
||||
|
||||
#### 3.1 创建第二个组网
|
||||
|
||||
**路径**: 组网管理 → 创建组网
|
||||
|
||||
**步骤 1: 基础信息**
|
||||
```
|
||||
组网名称:测试环境
|
||||
虚拟 IPv4 网段:10.0.1.0/24
|
||||
启用 DDNS 同步:✅ ON
|
||||
DDNS 服务:选择同一个 DDNS 服务
|
||||
前缀模式:🔧 自定义
|
||||
自定义前缀:test-env
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 输入前缀后自动检测(500ms 防抖)
|
||||
- [ ] 如果前缀可用,显示绿色标签"该前缀可用"
|
||||
- [ ] 如果前缀被占用,显示红色标签"该前缀已被占用"
|
||||
|
||||
**测试冲突场景**:
|
||||
```
|
||||
1. 输入已被占用的前缀(如第一个组网的前缀)
|
||||
2. 观察实时检测结果
|
||||
3. 修改为未使用的前缀
|
||||
4. 确认可用后再提交
|
||||
```
|
||||
|
||||
**步骤 2-5: 完成创建**
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 创建成功
|
||||
- [ ] Database 中 RecordPrefix = "test-env"
|
||||
- [ ] PrefixMode = "custom"
|
||||
|
||||
---
|
||||
|
||||
#### 3.2 验证冲突检测
|
||||
|
||||
**测试步骤**:
|
||||
1. 再次创建组网
|
||||
2. 选择自定义模式
|
||||
3. 输入已使用的前缀(如 "test-env")
|
||||
4. 等待 500ms
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 显示红色标签"该前缀已被占用"
|
||||
- [ ] 无法提交(或提交时报错)
|
||||
|
||||
**API 验证**:
|
||||
```bash
|
||||
# 手动调用检测接口
|
||||
curl -G "http://localhost:9531/api/v1/ddns/check-prefix" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
--data-urlencode "service_id={service_id}" \
|
||||
--data-urlencode "prefix=test-env"
|
||||
|
||||
# 期望返回
|
||||
{
|
||||
"data": {
|
||||
"occupied": true,
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **阶段 4: 获取可用 Usage 列表**
|
||||
|
||||
#### 4.1 API 测试
|
||||
|
||||
```bash
|
||||
curl -G "http://localhost:9531/api/v1/ddns/usages/available" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
--data-urlencode "service_id={service_id}"
|
||||
```
|
||||
|
||||
**期望返回**:
|
||||
```json
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "usage_id_1",
|
||||
"provider_id": "service_id",
|
||||
"prefix_mode": "auto",
|
||||
"record_prefix": "EjRWeJyt5uU",
|
||||
"record_type": "TXT",
|
||||
"description": "MeshSeed 同步 - 办公网络",
|
||||
"is_occupied": true,
|
||||
"network_id": 123456789,
|
||||
"full_domain": "_meshray.EjRWeJyt5uU.mesh.example.com"
|
||||
},
|
||||
{
|
||||
"id": "usage_id_2",
|
||||
"prefix_mode": "custom",
|
||||
"record_prefix": "test-env",
|
||||
"is_occupied": true,
|
||||
"full_domain": "_meshray.test-env.mesh.example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**验证点**:
|
||||
- [ ] 返回正确的 JSON 结构
|
||||
- [ ] full_domain 格式正确
|
||||
- [ ] is_occupied 标记正确
|
||||
- [ ] prefix_mode 区分 auto/custom
|
||||
|
||||
---
|
||||
|
||||
### **阶段 5: MeshSeed 同步验证**
|
||||
|
||||
#### 5.1 分享组网时查看 DDNS 信息
|
||||
|
||||
**路径**: 组网管理 → 详情 → 分享 MeshSeed
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 显示 DDNS 同步开关
|
||||
- [ ] 显示将同步到的完整域名
|
||||
- [ ] 格式:`_meshray.{前缀}.{域名}`
|
||||
|
||||
---
|
||||
|
||||
#### 5.2 手动触发同步(可选)
|
||||
|
||||
**API 测试**:
|
||||
```bash
|
||||
# 手动触发 DDNS 同步
|
||||
curl -X POST http://localhost:9531/api/v1/ddns/sync \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- [ ] 同步成功
|
||||
- [ ] 日志显示同步到正确的域名
|
||||
- [ ] DNS 记录包含加密的 MeshSeed
|
||||
|
||||
---
|
||||
|
||||
## 🔍 问题排查
|
||||
|
||||
### **问题 1: DDNS 服务列表为空**
|
||||
|
||||
**可能原因**:
|
||||
1. 未配置 DDNS 服务
|
||||
2. API 路径错误
|
||||
3. 鉴权失败
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查服务是否存在
|
||||
curl -X GET http://localhost:9531/api/v1/services?category=dns&type=ddns \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
|
||||
# 2. 查看浏览器控制台是否有错误
|
||||
F12 → Console → 查看错误信息
|
||||
|
||||
# 3. 检查后端日志
|
||||
查看终端输出的日志信息
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **问题 2: 前缀检测不工作**
|
||||
|
||||
**可能原因**:
|
||||
1. API 路径错误
|
||||
2. 参数传递错误
|
||||
3. 数据库表不存在
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 手动调用检测接口
|
||||
curl -G "http://localhost:9531/api/v1/ddns/check-prefix" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
--data-urlencode "service_id={service_id}" \
|
||||
--data-urlencode "prefix=test"
|
||||
|
||||
# 2. 检查数据库表结构
|
||||
sqlite3 meshray.db ".schema ddns_usages"
|
||||
|
||||
# 3. 查看前端网络请求
|
||||
F12 → Network → 查找 check-prefix 请求
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **问题 3: 创建组网失败**
|
||||
|
||||
**可能原因**:
|
||||
1. 事务处理错误
|
||||
2. 外键约束冲突
|
||||
3. 字段长度超限
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 查看后端日志
|
||||
终端输出会显示详细错误信息
|
||||
|
||||
# 2. 检查数据库状态
|
||||
sqlite3 meshray.db "SELECT * FROM networks ORDER BY id DESC LIMIT 1;"
|
||||
|
||||
# 3. 查看浏览器控制台
|
||||
F12 → Console → 查看 JavaScript 错误
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 测试结果记录表
|
||||
|
||||
| 测试项 | 预期结果 | 实际结果 | 状态 | 备注 |
|
||||
|--------|----------|----------|------|------|
|
||||
| DDNS 服务配置 | 保存成功 | | ⬜ | |
|
||||
| 服务列表加载 | 显示已配置的服务 | | ⬜ | |
|
||||
| 自动生成模式 | 显示预览 | | ⬜ | |
|
||||
| 自定义模式检测 | 实时检测占用 | | ⬜ | |
|
||||
| 创建组网(自动) | 成功创建 | | ⬜ | |
|
||||
| 创建组网(自定义) | 成功创建 | | ⬜ | |
|
||||
| 前缀冲突检测 | 正确识别占用 | | ⬜ | |
|
||||
| 数据库记录 | 字段完整 | | ⬜ | |
|
||||
| Usage API | 返回正确数据 | | ⬜ | |
|
||||
|
||||
---
|
||||
|
||||
## ✅ 验收标准
|
||||
|
||||
### **功能完整性**
|
||||
- [x] 后端 API 全部实现
|
||||
- [x] 前端 UI 全部实现
|
||||
- [ ] 前后端联调通过
|
||||
- [ ] 完整流程无报错
|
||||
|
||||
### **数据正确性**
|
||||
- [ ] Network 表 DDNS 字段正确存储
|
||||
- [ ] DDNSUsage 表 PrefixMode 正确标记
|
||||
- [ ] RecordPrefix 格式正确(auto 为 Base64,custom 为用户输入)
|
||||
- [ ] NetworkDDNSBinding 表绑定关系正确
|
||||
|
||||
### **用户体验**
|
||||
- [ ] DDNS 服务列表正确加载
|
||||
- [ ] 自动生成模式有清晰预览
|
||||
- [ ] 自定义模式实时检测(500ms 防抖)
|
||||
- [ ] 占用状态直观显示(绿/红标签)
|
||||
- [ ] 错误提示清晰明确
|
||||
|
||||
### **性能表现**
|
||||
- [ ] API 响应时间 < 200ms
|
||||
- [ ] 前端操作流畅无卡顿
|
||||
- [ ] 防抖机制正常工作
|
||||
|
||||
---
|
||||
|
||||
## 🚀 开始测试
|
||||
|
||||
**服务已启动**: http://localhost:9531
|
||||
|
||||
**测试步骤**:
|
||||
1. 点击预览按钮打开浏览器
|
||||
2. 登录系统(admin/admin123)
|
||||
3. 按照上述测试清单逐项测试
|
||||
4. 记录测试结果
|
||||
|
||||
**发现问题**:
|
||||
- 如果发现任何 bug 或不一致,立即记录并修复
|
||||
- 如果 API 报错,检查后端日志和前端 Network 面板
|
||||
- 如果 UI 不显示,检查浏览器 Console 和后端日志
|
||||
|
||||
准备开始测试了吗?🎯
|
||||
Reference in New Issue
Block a user