测试文档
1. 扫描功能
扫描功能,主要校验的是数据库记录是否正确 (记录是否存在,记录的 status 是否正确)
1.1. 场景
- 新的归档
- 增量归档 (需要额外校验,被删除或修改的文件,对应记录是否删除或更新)
- 已经存在若干个归档,再添加独立的新的归档
- 两个包含关系的归档
1.2. 详细测试场景和预期结果
为了确保扫描功能的正确性,我们需要覆盖以下详细的测试场景:
| 场景 ID | 场景描述 | 操作步骤 | 预期结果 |
|---|---|---|---|
| T01 | 首次扫描新目录 | 1. 创建新目录结构 2. 执行扫描 | 1. 所有新记录状态为 WaitToArchive 2. 根目录状态为 WaitToScan -> InScanning -> WaitToArchive 3. 数据库中创建所有目录和文件记录 |
| T02 | 增量扫描 - 无变更 | 1. 执行首次扫描 2. 再次执行扫描 (无文件变更) | 1. 所有现有记录状态为 Health 2. 无新记录创建 3. 无记录删除 |
| T03 | 增量扫描 - 文件修改 | 1. 执行首次扫描 2. 修改部分文件内容 3. 执行增量扫描 | 1. 修改的文件状态为 WaitToArchive 2. 未修改文件状态为 Health 3. 所有目录状态为 WaitToArchive |
| T04 | 增量扫描 - 新增文件 | 1. 执行首次扫描 2. 添加新文件 3. 执行增量扫描 | 1. 新文件状态为 WaitToArchive 2. 现有文件状态为 Health 3. 包含新文件的目录状态为 WaitToArchive |
| T05 | 增量扫描 - 新增目录 | 1. 执行首次扫描 2. 添加新目录及文件 3. 执行增量扫描 | 1. 新目录状态为 WaitToArchive 2. 新目录中的文件状态为 WaitToArchive 3. 现有记录状态为 Health |
| T06 | 增量扫描 - 删除文件 | 1. 执行首次扫描 2. 删除部分文件 3. 执行增量扫描 | 1. 删除的文件状态为 WaitToDelete 2. 未删除文件状态为 Health 3. 目录状态为 WaitToArchive |
| T07 | 增量扫描 - 删除目录 | 1. 执行首次扫描 2. 删除整个目录 3. 执行增量扫描 | 1. 删除目录及其中所有文件状态为 WaitToDelete 2. 其他记录状态为 Health |
| T08 | 多个独立归档 | 1. 扫描目录 A 2. 扫描目录 B(与 A 无关) | 1. 两个独立的根目录记录 2. 各自的目录和文件记录互不干扰 3. 所有记录状态正确 |
| T09 | 包含关系的归档 | 1. 扫描父目录 2. 扫描子目录 | 1. 两个独立的根目录记录 2. 子目录的记录在两个归档中都存在 3. 状态管理正确 |
1.3. 数据库操作验证点
在每个测试场景中,我们需要验证以下数据库操作点:
根目录表 (info_root)
- 根目录记录正确创建
- 根目录状态正确更新 (WaitToScan -> InScanning -> WaitToArchive -> InArchiving -> Health)
- 多个根目录之间互不干扰
目录表 (info_directory)
- 目录记录正确创建
- 目录状态正确更新 (WaitToArchive <-> InArchiving <-> Health, WaitToDelete)
- 父子目录关系正确维护
文件表 (info_file)
- 文件记录正确创建
- 文件状态正确更新 (WaitToArchive <-> InArchiving <-> Health, WaitToDelete)
- 文件与目录的关联关系正确
视图 (view_file)
- 能正确查询文件及其目录信息
- 状态过滤功能正常
2. 归档功能
归档功能,主要校验的是数据库记录状态是否正确更新,以及文件是否正确归档
2.1. 场景
- 首次归档
- 增量归档
- 大文件归档
- 小文件归档
- [TODO]多个归档任务并行处理
2.2. 详细测试场景和预期结果
为了确保归档功能的正确性,我们需要覆盖以下详细的测试场景:
| 场景 ID | 场景描述 | 操作步骤 | 预期结果 |
|---|---|---|---|
| A01 | 首次归档 | 1. 扫描新目录 2. 执行归档 | 1. 根目录状态为 WaitToArchive -> InArchiving -> Health 2. 所有目录和文件状态为 WaitToArchive -> InArchiving -> Health 3. 文件被正确归档 |
| A02 | 增量归档 | 1. 扫描目录 2. 修改部分文件 3. 重新扫描 4. 执行归档 | 1. 仅修改的文件状态从 WaitToArchive -> InArchiving -> Health 2. 未修改文件状态保持 Health 3. 相关目录状态正确更新 4. 修改的文件被正确归档 |
| A03 | 大文件归档 | 1. 扫描包含大文件的目录 2. 执行归档 | 1. 大文件状态为 WaitToArchive -> InArchiving -> Health 2. 归档过程中正确记录进度 3. 大文件被正确归档 |
| A04 | 小文件归档 | 1. 扫描包含小文件的目录 2. 执行归档 | 1. 小文件状态为 WaitToArchive -> Health (跳过 InArchiving) 2. 小文件被正确归档 |
| [TODO]A05 | 多个归档任务并行 | 1. 创建多个归档任务 2. 同时执行归档 | 1. 各任务独立执行 2. 各任务状态正确更新 3. 所有文件被正确归档 4. 任务间互不干扰 |
| A06 | 归档过程中断 | 1. 开始归档 2. 中断归档过程 3. 重新执行归档 | 1. 中断前已完成的文件状态为 Health 2. 未完成的文件状态为 WaitToArchive 3. 重新执行能继续完成归档 |
| A07 | 归档失败处理 | 1. 扫描目录 2. 模拟归档失败 3. 重新执行归档 | 1. 失败文件状态为 ErrorArchivingFailed 2. 重新执行能正确处理失败文件 3. 最终所有文件状态为 Health |
2.3. 数据库操作验证点
在每个测试场景中,我们需要验证以下数据库操作点:
根目录表 (info_root)
- 根目录状态正确更新 (WaitToArchive -> InArchiving -> Health)
- 异常情况下状态正确更新 (ErrorArchivingFailed)
目录表 (info_directory)
- 目录状态正确更新 (WaitToArchive -> InArchiving -> Health, ErrorArchivingFailed)
- 父子目录状态更新顺序正确
文件表 (info_file)
- 文件状态正确更新 (WaitToArchive -> InArchiving -> Health, ErrorArchivingFailed)
- 小文件可能跳过 InArchiving 状态直接到 Health 状态
- 文件与目录的关联关系正确
视图 (view_file)
- 能正确查询文件及其目录信息
- 状态过滤功能正常
- 能正确区分已归档和未归档文件
归档文件存储验证
- 归档文件正确存储在指定位置
- 归档文件内容与原文件一致
- 重复文件不会重复存储(去重机制)
2.4. 本地文件验证点
在每个测试场景中,我们需要验证以下本地文件操作点:
归档目录结构验证
- 归档目录在归档开始前为空目录
- 归档完成后,归档目录中包含正确组织的文件结构
- 归档目录中的文件命名符合预期规则(基于哈希值)
文件内容验证
- 归档文件内容与原始文件内容一致(通过哈希值校验)
- 大文件分卷存储正确,能够完整还原
- 小文件直接存储,不进行分卷处理
重复文件处理验证
- 相同内容的文件只在归档目录中存储一份
- 不同目录中的相同文件在归档中引用同一份文件
- 文件去重机制正确工作,节省存储空间
文件权限和元数据验证
- 归档文件具有正确的访问权限
- 文件的修改时间等元数据正确保存
- 归档文件的创建时间与归档执行时间一致
异常情况下的文件验证
- 归档中断后,已归档的文件保持完整可用
- 归档失败的文件不会产生不完整的归档文件
- 重新归档时,能够正确处理已存在的归档文件
3. 解档功能
解档功能,主要校验的是从归档中正确还原文件到目标位置
3.1. 场景
- 完整解档
- [TODO]部分解档
- 大文件解档
- 小文件解档
- 分卷文件解档
3.2. 详细测试场景和预期结果
为了确保解档功能的正确性,我们需要覆盖以下详细的测试场景:
| 场景 ID | 场景描述 | 操作步骤 | 预期结果 |
|---|---|---|---|
| E01 | 完整解档 | 1. 归档目录 2. 执行完整解档 | 1. 所有文件正确还原到目标目录 2. 文件内容与原始文件一致 3. 文件目录结构与原始目录一致 4. 文件修改时间正确设置 |
| [TODO]E02 | 部分解档 | 1. 归档目录 2. 选择部分文件执行解档 | 1. 仅选择的文件被还原 2. 未选择的文件不被还原 3. 文件内容和属性正确 |
| E03 | 大文件解档 | 1. 归档包含大文件的目录 2. 执行解档 | 1. 大文件正确还原 2. 分卷文件正确合并 3. 解档过程中内存使用合理 4. 文件内容完整性得到保证 |
| E04 | 小文件解档 | 1. 归档包含小文件的目录 2. 执行解档 | 1. 小文件正确还原 2. 文件内容和属性正确 3. 解档速度快 |
| E05 | 分卷文件解档 | 1. 归档包含分卷文件的目录 2. 执行解档 | 1. 分卷文件正确识别和合并 2. 完整文件正确还原 3. 文件内容完整性得到保证 |
| E06 | 解档到已存在目录 | 1. 归档目录 2. 目标目录已存在同名文件 3. 执行解档 | 1. 同名文件被正确覆盖 2. 文件内容与归档中一致 3. 文件属性正确设置 |
| E07 | 解档过程中断 | 1. 开始解档 2. 中断解档过程 3. 重新执行解档 | 1. 中断前已完成的文件保持完整 2. 未完成的文件能够继续解档 3. 最终所有文件正确还原 |
3.3. 本地文件验证点
在每个测试场景中,我们需要验证以下本地文件操作点:
目标目录结构验证
- 解档后目标目录结构与原始目录结构一致
- 目录权限和属性正确设置
- 嵌套目录正确创建
文件内容和属性验证
- 解档后的文件内容与原始文件一致(通过哈希值校验)
- 文件修改时间正确设置
- 文件访问权限正确设置
特殊文件处理验证
- 空文件正确解档
- 隐藏文件正确解档
- 只读文件正确解档
分卷文件处理验证
- 分卷文件正确识别和合并
- 合并后文件完整性得到保证
- 合并过程中不产生临时文件残留
异常情况处理验证
- 归档文件损坏时的错误处理
- 磁盘空间不足时的错误处理
- 目标目录无写权限时的错误处理
4. 灾备功能
灾备功能基于 Reed-Solomon 纠删码技术,实现归档文件级别的容错保护。通过创建数据分片和校验分片,在部分文件丢失时能够自动恢复。
4.1. 现有测试覆盖情况
测试文件统计:
test_disaster_recovery_decoder.rs: 4 个测试test_disaster_recovery_encoder.rs: 4 个测试test_disaster_recovery_checker.rs: 4 个测试- 总计:12 个测试用例
已覆盖的核心功能:
- 基本编码器功能(创建灾备组,生成校验分片)
- 基本解码器功能(恢复丢失文件)
- 数据恢复能力(单文件和多文件丢失场景)
- 文件完整性验证(哈希校验)
- 不同大小文件处理(包括空文件)
- 数据分片存储选项
- 数据库集成和状态管理
4.2. 缺失的测试场景
高优先级缺失场景:
错误处理和异常情况
- 磁盘空间不足时的处理
- 文件权限问题(无读/写权限)
- 存储路径不存在或不可访问
- 数据库连接断开或事务失败
- 文件被其他进程锁定
数据损坏场景
- 校验分片损坏测试
- 数据分片部分损坏
- 哈希值不匹配处理
- 文件系统损坏模拟
中优先级缺失场景:
边界情况测试
- 大规模文件组(>10 个文件)
- 超大文件处理(>1GB)
- 最小配置测试(1 数据 +1 校验分片)
- 极限配置测试(大量分片)
并发和性能测试
- 多任务并发执行
- 大文件处理性能监控
- 内存使用量测试
- 长时间运行稳定性
配置验证
- 无效配置参数处理
- 边界值配置测试
- 配置持久化验证
- 配置文件格式验证
4.3. 建议补充的测试用例
| 场景 ID | 场景描述 | 优先级 | 预期结果 |
|---|---|---|---|
| DR01 | 磁盘空间不足错误处理 | 高 | 编码/解码过程正确检测并报告磁盘空间不足错误 |
| DR02 | 文件权限错误处理 | 高 | 无权限访问文件时正确报告错误并终止操作 |
| DR03 | 校验分片损坏恢复 | 高 | 校验分片损坏时仍能正常恢复数据分片 |
| DR04 | 大规模文件组处理 | 中 | 正确处理 10 个以上文件的灾备组 |
| DR05 | 并发编码任务 | 中 | 多个编码任务可同时执行且互不干扰 |
| DR06 | 最小配置测试 | 中 | 1 数据 +1 校验分片配置正确工作 |
| DR07 | 无效配置参数 | 中 | 无效配置参数被正确拒绝并报告错误 |
| DR08 | 数据库事务失败 | 高 | 数据库操作失败时正确回滚并报告错误 |
| DR09 | 超大文件处理 | 中 | 正确处理超过 1GB 的单个文件 |
| DR10 | 长时间运行稳定性 | 中 | 系统在长时间运行后仍保持稳定 |
4.4. 完善度评估
- 当前完善度:75% - 核心功能测试完整
- 建议完善度:90% - 补充错误处理和边界测试
- 目标完善度:95% - 包含性能和并发测试
4.5. 优先级修复计划
- 立即修复:错误处理测试(DR01, DR02, DR08)
- 近期修复:数据损坏场景(DR03)
- 中期修复:边界情况和并发测试(DR04, DR05, DR06, DR09)
- 长期维护:性能测试和配置验证(DR07, DR10)