Skip to content

测试文档

1. 扫描功能

扫描功能,主要校验的是数据库记录是否正确 (记录是否存在,记录的 status 是否正确)

1.1. 场景

  1. 新的归档
  2. 增量归档 (需要额外校验,被删除或修改的文件,对应记录是否删除或更新)
  3. 已经存在若干个归档,再添加独立的新的归档
  4. 两个包含关系的归档

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. 数据库操作验证点

在每个测试场景中,我们需要验证以下数据库操作点:

  1. 根目录表 (info_root)

    • 根目录记录正确创建
    • 根目录状态正确更新 (WaitToScan -> InScanning -> WaitToArchive -> InArchiving -> Health)
    • 多个根目录之间互不干扰
  2. 目录表 (info_directory)

    • 目录记录正确创建
    • 目录状态正确更新 (WaitToArchive <-> InArchiving <-> Health, WaitToDelete)
    • 父子目录关系正确维护
  3. 文件表 (info_file)

    • 文件记录正确创建
    • 文件状态正确更新 (WaitToArchive <-> InArchiving <-> Health, WaitToDelete)
    • 文件与目录的关联关系正确
  4. 视图 (view_file)

    • 能正确查询文件及其目录信息
    • 状态过滤功能正常

2. 归档功能

归档功能,主要校验的是数据库记录状态是否正确更新,以及文件是否正确归档

2.1. 场景

  1. 首次归档
  2. 增量归档
  3. 大文件归档
  4. 小文件归档
  5. [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. 数据库操作验证点

在每个测试场景中,我们需要验证以下数据库操作点:

  1. 根目录表 (info_root)

    • 根目录状态正确更新 (WaitToArchive -> InArchiving -> Health)
    • 异常情况下状态正确更新 (ErrorArchivingFailed)
  2. 目录表 (info_directory)

    • 目录状态正确更新 (WaitToArchive -> InArchiving -> Health, ErrorArchivingFailed)
    • 父子目录状态更新顺序正确
  3. 文件表 (info_file)

    • 文件状态正确更新 (WaitToArchive -> InArchiving -> Health, ErrorArchivingFailed)
    • 小文件可能跳过 InArchiving 状态直接到 Health 状态
    • 文件与目录的关联关系正确
  4. 视图 (view_file)

    • 能正确查询文件及其目录信息
    • 状态过滤功能正常
    • 能正确区分已归档和未归档文件
  5. 归档文件存储验证

    • 归档文件正确存储在指定位置
    • 归档文件内容与原文件一致
    • 重复文件不会重复存储(去重机制)

2.4. 本地文件验证点

在每个测试场景中,我们需要验证以下本地文件操作点:

  1. 归档目录结构验证

    • 归档目录在归档开始前为空目录
    • 归档完成后,归档目录中包含正确组织的文件结构
    • 归档目录中的文件命名符合预期规则(基于哈希值)
  2. 文件内容验证

    • 归档文件内容与原始文件内容一致(通过哈希值校验)
    • 大文件分卷存储正确,能够完整还原
    • 小文件直接存储,不进行分卷处理
  3. 重复文件处理验证

    • 相同内容的文件只在归档目录中存储一份
    • 不同目录中的相同文件在归档中引用同一份文件
    • 文件去重机制正确工作,节省存储空间
  4. 文件权限和元数据验证

    • 归档文件具有正确的访问权限
    • 文件的修改时间等元数据正确保存
    • 归档文件的创建时间与归档执行时间一致
  5. 异常情况下的文件验证

    • 归档中断后,已归档的文件保持完整可用
    • 归档失败的文件不会产生不完整的归档文件
    • 重新归档时,能够正确处理已存在的归档文件

3. 解档功能

解档功能,主要校验的是从归档中正确还原文件到目标位置

3.1. 场景

  1. 完整解档
  2. [TODO]部分解档
  3. 大文件解档
  4. 小文件解档
  5. 分卷文件解档

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. 本地文件验证点

在每个测试场景中,我们需要验证以下本地文件操作点:

  1. 目标目录结构验证

    • 解档后目标目录结构与原始目录结构一致
    • 目录权限和属性正确设置
    • 嵌套目录正确创建
  2. 文件内容和属性验证

    • 解档后的文件内容与原始文件一致(通过哈希值校验)
    • 文件修改时间正确设置
    • 文件访问权限正确设置
  3. 特殊文件处理验证

    • 空文件正确解档
    • 隐藏文件正确解档
    • 只读文件正确解档
  4. 分卷文件处理验证

    • 分卷文件正确识别和合并
    • 合并后文件完整性得到保证
    • 合并过程中不产生临时文件残留
  5. 异常情况处理验证

    • 归档文件损坏时的错误处理
    • 磁盘空间不足时的错误处理
    • 目标目录无写权限时的错误处理

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. 缺失的测试场景

高优先级缺失场景:

  1. 错误处理和异常情况

    • 磁盘空间不足时的处理
    • 文件权限问题(无读/写权限)
    • 存储路径不存在或不可访问
    • 数据库连接断开或事务失败
    • 文件被其他进程锁定
  2. 数据损坏场景

    • 校验分片损坏测试
    • 数据分片部分损坏
    • 哈希值不匹配处理
    • 文件系统损坏模拟

中优先级缺失场景:

  1. 边界情况测试

    • 大规模文件组(>10 个文件)
    • 超大文件处理(>1GB)
    • 最小配置测试(1 数据 +1 校验分片)
    • 极限配置测试(大量分片)
  2. 并发和性能测试

    • 多任务并发执行
    • 大文件处理性能监控
    • 内存使用量测试
    • 长时间运行稳定性
  3. 配置验证

    • 无效配置参数处理
    • 边界值配置测试
    • 配置持久化验证
    • 配置文件格式验证

4.3. 建议补充的测试用例

场景 ID场景描述优先级预期结果
DR01磁盘空间不足错误处理编码/解码过程正确检测并报告磁盘空间不足错误
DR02文件权限错误处理无权限访问文件时正确报告错误并终止操作
DR03校验分片损坏恢复校验分片损坏时仍能正常恢复数据分片
DR04大规模文件组处理正确处理 10 个以上文件的灾备组
DR05并发编码任务多个编码任务可同时执行且互不干扰
DR06最小配置测试1 数据 +1 校验分片配置正确工作
DR07无效配置参数无效配置参数被正确拒绝并报告错误
DR08数据库事务失败数据库操作失败时正确回滚并报告错误
DR09超大文件处理正确处理超过 1GB 的单个文件
DR10长时间运行稳定性系统在长时间运行后仍保持稳定

4.4. 完善度评估

  • 当前完善度:75% - 核心功能测试完整
  • 建议完善度:90% - 补充错误处理和边界测试
  • 目标完善度:95% - 包含性能和并发测试

4.5. 优先级修复计划

  1. 立即修复:错误处理测试(DR01, DR02, DR08)
  2. 近期修复:数据损坏场景(DR03)
  3. 中期修复:边界情况和并发测试(DR04, DR05, DR06, DR09)
  4. 长期维护:性能测试和配置验证(DR07, DR10)