goaidb/design/testcases/mongodb_protocol_testcases.md

119 lines
3.2 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.

# MongoDB协议操作码测试用例
## 共用前置条件
1. 服务器已启动并监听本地端口
2. 测试数据库和集合已初始化
3. MockStorage已配置适当的响应行为
## OP_UPDATE测试用例
### TC001-UPDATE-001: 基本文档更新
**描述**: 验证基本的$set更新操作
**前置条件**:
- 数据库testdb存在
- 集合testcoll存在
- 文档{name:"test"}存在
**步骤**:
1. 构造包含OP_UPDATE操作的BSON请求
2. 发送更新操作包含$set修改器
3. 检查存储层UpdateFunc是否被正确调用
4. 验证响应格式是否符合MongoDB协议
**预期结果**:
- UpdateFunc被调用且参数正确
- 返回成功状态码
- 更新后的文档字段值正确
### TC001-UPDATE-002: 多文档更新
**描述**: 验证多文档更新选项
**前置条件**:
- 存在多个匹配查询条件的文档
**步骤**:
1. 构造包含UBF_MULTI_UPDATE标志的更新请求
2. 发送请求并检查存储层处理
3. 验证所有匹配文档是否都被更新
**预期结果**:
- 所有匹配文档都被正确更新
- 返回正确的更新计数
### TC001-UPDATE-003: 无效BSON格式处理
**描述**: 验证对无效BSON格式的错误处理
**步骤**:
1. 构造包含损坏BSON数据的更新请求
2. 发送请求
3. 检查服务器是否正常处理错误
**预期结果**:
- 返回格式错误响应
- 服务器不崩溃
## OP_DELETE测试用例
### TC001-DELETE-001: 单文档删除
**描述**: 验证单个文档删除
**前置条件**:
- 存在指定待删除文档
**步骤**:
1. 构造OP_DELETE请求
2. 发送请求并检查存储层DeleteFunc调用
3. 验证文档是否被删除
**预期结果**:
- DeleteFunc被正确调用
- 文档被成功删除
- 返回删除计数1
### TC001-DELETE-002: 多文档删除
**描述**: 验证批量删除操作
**前置条件**:
- 存在多个匹配删除条件的文档
**步骤**:
1. 构造包含批量删除标志的请求
2. 发送请求
3. 验证所有匹配文档是否被删除
**预期结果**:
- 所有匹配文档被删除
- 返回正确的删除计数
## OP_COMMAND测试用例
### TC001-COMMAND-001: isMaster命令执行
**描述**: 验证isMaster命令处理
**步骤**:
1. 构造OP_COMMAND请求命令为isMaster
2. 发送请求
3. 检查响应是否包含必要的实例信息
**预期结果**:
- 返回包含ismaster:true的响应
- 包含版本号、最大BSON大小等元数据
### TC001-COMMAND-002: createCollection命令
**描述**: 验证集合创建命令
**前置条件**:
- 目标集合不存在
**步骤**:
1. 构造createCollection命令请求
2. 发送请求
3. 检查存储层CreateCollFunc调用
**预期结果**:
- CreateCollFunc被正确调用
- 返回成功状态码
## OP_GET_MORE测试用例
### TC001-GETMORE-001: 基本分页获取
**描述**: 验证游标分页功能
**前置条件**:
- 存在大量文档需要分批获取
**步骤**:
1. 构造初始查询请求获取游标ID
2. 使用OP_GET_MORE请求获取后续数据
3. 验证返回数据是否完整
**预期结果**:
- 正确返回第一批数据
- 后续请求通过游标获取剩余数据
### TC001-GETMORE-002: 游标超时清理
**描述**: 验证游标超时机制
**步骤**:
1. 创建游标后延迟一段时间
2. 尝试使用过期游标获取数据
**预期结果**:
- 返回游标不存在或已超时错误