goaidb/design/testcases/mongodb_protocol_testcases.md

189 lines
5.0 KiB
Markdown
Raw Permalink 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_UPDATE扩展测试用例
### TC001-UPDATE-004: $inc操作符验证
**描述**: 验证数值递增操作符功能
**前置条件**:
- 文档存在且包含数值字段
**步骤**:
1. 构造包含$inc操作符的更新请求
2. 发送请求并检查存储层处理
3. 验证字段值是否正确递增
**预期结果**:
- 字段值正确递增
- 返回成功状态码
### TC001-UPDATE-005: 权限不足处理
**描述**: 验证无更新权限时的错误处理
**步骤**:
1. 使用无权限账户发送更新请求
2. 检查服务器响应
**预期结果**:
- 返回权限拒绝错误
- 服务器保持正常运行
## OP_DELETE测试用例
### TC001-DELETE-001: 单文档删除
**描述**: 验证单个文档删除
**前置条件**:
- 存在指定待删除文档
**步骤**:
1. 构造OP_DELETE请求
2. 发送请求并检查存储层DeleteFunc调用
3. 验证文档是否被删除
**预期结果**:
- DeleteFunc被正确调用
- 文档被成功删除
- 返回删除计数1
### TC001-DELETE-002: 多文档删除
**描述**: 验证批量删除操作
**前置条件**:
- 存在多个匹配删除条件的文档
**步骤**:
1. 构造包含批量删除标志的请求
2. 发送请求
3. 验证所有匹配文档是否被删除
**预期结果**:
- 所有匹配文档被删除
- 返回正确的删除计数
## OP_DELETE扩展测试用例
### TC001-DELETE-003: 删除不存在的文档
**描述**: 验证删除不存在文档的处理
**步骤**:
1. 构造针对不存在文档的删除请求
2. 发送请求
3. 检查存储层调用情况
**预期结果**:
- DeleteFunc被调用
- 返回删除计数0
### TC001-DELETE-004: 权限不足处理
**描述**: 验证无删除权限时的错误处理
**步骤**:
1. 使用无权限账户发送删除请求
2. 检查服务器响应
**预期结果**:
- 返回权限拒绝错误
- 文档未被删除
## 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_COMMAND扩展测试用例
### TC001-COMMAND-003: dropCollection命令
**描述**: 验证集合删除命令
**前置条件**:
- 目标集合存在
**步骤**:
1. 构造dropCollection命令请求
2. 发送请求
3. 检查存储层DropCollFunc调用
**预期结果**:
- DropCollFunc被正确调用
- 返回成功状态码
## OP_GET_MORE测试用例
### TC001-GETMORE-001: 基本分页获取
**描述**: 验证游标分页功能
**前置条件**:
- 存在大量文档需要分批获取
**步骤**:
1. 构造初始查询请求获取游标ID
2. 使用OP_GET_MORE请求获取后续数据
3. 验证返回数据是否完整
**预期结果**:
- 正确返回第一批数据
- 后续请求通过游标获取剩余数据
### TC001-GETMORE-002: 游标超时清理
**描述**: 验证游标超时机制
**步骤**:
1. 创建游标后延迟一段时间
2. 尝试使用过期游标获取数据
**预期结果**:
- 返回游标不存在或已超时错误
## OP_GET_MORE扩展测试用例
### TC001-GETMORE-003: 无效游标ID处理
**描述**: 验证无效游标ID的错误处理
**步骤**:
1. 构造使用无效游标ID的GET_MORE请求
2. 发送请求
**预期结果**:
- 返回游标不存在错误
- 服务器保持正常运行