Archive Module Phase 1: 核心框架搭建完成 ⭐⭐⭐⭐⭐
实现内容: ✅ archive模块完整架构(10个文件,约900行) ✅ ArchiveProcessor trait统一接口 ✅ ProcessorRegistry插件式架构 ✅ FormatDetector格式自动检测 ✅ ArchiveConfig配置管理系统 ✅ Warning警告系统(RAR/XZ/7z争议格式) ✅ Zip Slip/Zip Bomb安全防护 ✅ 核心格式stub(ZIP/TAR/GZIP等9种) ✅ 可选格式stub(RAR/XZ/7z等3种) ✅ 测试框架基础 支持的格式: 核心格式(默认启用):ZIP, TAR, GZIP, ZSTD, BZIP2, LZ4, TAR.GZ, TAR.BZ2, TAR.ZST(9种) 可选格式(默认禁用):RAR(法律风险), XZ(外部依赖), 7z(库不稳定)(3种) 总计:12种压缩格式 安全特性: - Zip Slip防护(路径遍历攻击) - Zip Bomb防护(解压比率限制) - 文件大小限制 - 法律风险警告(RAR专利) 下一步:Phase 2 - 核心格式完整实现(ZIP/TAR/GZIP处理器)
This commit is contained in:
57
markbase-core/src/archive/tests/mod.rs
Normal file
57
markbase-core/src/archive/tests/mod.rs
Normal file
@@ -0,0 +1,57 @@
|
||||
// Archive Module Tests
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::archive::*;
|
||||
|
||||
#[test]
|
||||
fn test_processor_registry_initialization() {
|
||||
let config = ArchiveConfig::default();
|
||||
let mut registry = ProcessorRegistry::new(config);
|
||||
|
||||
registry.initialize().unwrap();
|
||||
|
||||
let formats = registry.enabled_formats();
|
||||
|
||||
// Core formats (9) should always be enabled
|
||||
assert!(formats.contains(&ArchiveFormat::Zip));
|
||||
assert!(formats.contains(&ArchiveFormat::Tar));
|
||||
assert!(formats.contains(&ArchiveFormat::Gzip));
|
||||
|
||||
// Optional formats should be disabled by default
|
||||
assert!(!formats.contains(&ArchiveFormat::Rar));
|
||||
assert!(!formats.contains(&ArchiveFormat::Xz));
|
||||
assert!(!formats.contains(&ArchiveFormat::SevenZ));
|
||||
|
||||
// Should have exactly 9 core formats
|
||||
assert_eq!(formats.len(), 9);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_optional_formats_disabled_by_default() {
|
||||
let config = ArchiveConfig::default();
|
||||
|
||||
assert_eq!(config.enable_rar, false);
|
||||
assert_eq!(config.enable_xz, false);
|
||||
assert_eq!(config.enable_7z, false);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_config_validation() {
|
||||
let valid_config = ArchiveConfig::default();
|
||||
assert!(valid_config.validate().is_ok());
|
||||
|
||||
let invalid_config = ArchiveConfig {
|
||||
max_decompression_ratio: 1, // Too low
|
||||
..Default::default()
|
||||
};
|
||||
assert!(invalid_config.validate().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_archive_format_display() {
|
||||
assert_eq!(ArchiveFormat::Zip.to_string(), "ZIP");
|
||||
assert_eq!(ArchiveFormat::TarGzip.to_string(), "TAR.GZ");
|
||||
assert_eq!(ArchiveFormat::Rar.to_string(), "RAR");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user