test: refactor and expand compression engine tests with better organization and coverage

Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-14 11:41:05 -03:00
parent 81005ec8f4
commit 1a9a21e321

View File

@@ -4,6 +4,7 @@
mod tests { mod tests {
use tempfile::tempdir; use tempfile::tempdir;
use std::io::Write; use std::io::Write;
use std::str::FromStr;
// Import the modules we need for testing // Import the modules we need for testing
use keep::compression_engine::{self, CompressionType}; use keep::compression_engine::{self, CompressionType};
@@ -11,126 +12,223 @@ mod tests {
use keep::compression_engine::lz4::CompressionEngineLZ4; use keep::compression_engine::lz4::CompressionEngineLZ4;
use keep::compression_engine::none::CompressionEngineNone; use keep::compression_engine::none::CompressionEngineNone;
#[test] mod compression_tests {
fn test_compression_engine_gzip() { use super::*;
let test_data = b"test compression data";
#[test]
// Create a temporary file fn test_compression_engine_gzip() {
let dir = tempdir().expect("Failed to create temporary directory"); let test_data = b"test compression data";
let file_path = dir.path().join("test.gz");
// Create a temporary file
// Test compression engine let dir = tempdir().expect("Failed to create temporary directory");
let engine = CompressionEngineGZip::new(); let file_path = dir.path().join("test.gz");
assert!(engine.is_supported());
// Test compression engine
// Create compressed file let engine = CompressionEngineGZip::new();
{ assert!(engine.is_supported());
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data"); // Create compressed file
// Writer is dropped here, which should finish the compression {
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data");
// Writer is dropped here, which should finish the compression
}
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed.as_slice());
} }
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed.as_slice());
}
#[test] #[test]
fn test_compression_engine_lz4() { fn test_compression_engine_gzip_empty_data() {
let test_data = b"test compression data"; let test_data = b"";
// Create a temporary file // Create a temporary file
let dir = tempdir().expect("Failed to create temporary directory"); let dir = tempdir().expect("Failed to create temporary directory");
let file_path = dir.path().join("test.lz4"); let file_path = dir.path().join("test_empty.gz");
// Test compression engine // Test compression engine
let engine = CompressionEngineLZ4::new(); let engine = CompressionEngineGZip::new();
// Create compressed file // Create compressed file
{ {
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer"); let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data"); writer.write_all(test_data).expect("Failed to write data");
}
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed.as_slice());
} }
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed.as_slice());
}
#[test] #[test]
fn test_compression_engine_none() { fn test_compression_engine_lz4() {
let test_data = b"test compression data"; let test_data = b"test compression data";
// Create a temporary file // Create a temporary file
let dir = tempdir().expect("Failed to create temporary directory"); let dir = tempdir().expect("Failed to create temporary directory");
let file_path = dir.path().join("test.dat"); let file_path = dir.path().join("test.lz4");
// Test compression engine // Test compression engine
let engine = CompressionEngineNone::new(); let engine = CompressionEngineLZ4::new();
// Create file // Create compressed file
{ {
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer"); let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data"); writer.write_all(test_data).expect("Failed to write data");
}
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed.as_slice());
}
#[test]
fn test_compression_engine_lz4_large_data() {
let test_data: Vec<u8> = (0..10000).map(|i| (i % 256) as u8).collect();
// Create a temporary file
let dir = tempdir().expect("Failed to create temporary directory");
let file_path = dir.path().join("test_large.lz4");
// Test compression engine
let engine = CompressionEngineLZ4::new();
// Create compressed file
{
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(&test_data).expect("Failed to write data");
}
// Read compressed file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut decompressed = Vec::new();
std::io::copy(&mut reader, &mut decompressed).expect("Failed to read data");
assert_eq!(test_data, decompressed);
}
#[test]
fn test_compression_engine_none() {
let test_data = b"test compression data";
// Create a temporary file
let dir = tempdir().expect("Failed to create temporary directory");
let file_path = dir.path().join("test.dat");
// Test compression engine
let engine = CompressionEngineNone::new();
// Create file
{
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data");
}
// Read file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut data = Vec::new();
std::io::copy(&mut reader, &mut data).expect("Failed to read data");
assert_eq!(test_data, data.as_slice());
}
#[test]
fn test_compression_engine_none_empty_data() {
let test_data = b"";
// Create a temporary file
let dir = tempdir().expect("Failed to create temporary directory");
let file_path = dir.path().join("test_empty.dat");
// Test compression engine
let engine = CompressionEngineNone::new();
// Create file
{
let mut writer = engine.create(file_path.clone()).expect("Failed to create writer");
writer.write_all(test_data).expect("Failed to write data");
}
// Read file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut data = Vec::new();
std::io::copy(&mut reader, &mut data).expect("Failed to read data");
assert_eq!(test_data, data.as_slice());
} }
// Read file
let mut reader = engine.open(file_path).expect("Failed to open reader");
let mut data = Vec::new();
std::io::copy(&mut reader, &mut data).expect("Failed to read data");
assert_eq!(test_data, data.as_slice());
} }
#[test] mod compression_type_tests {
fn test_compression_engine_factory() { use super::*;
// Test getting different compression engines
let lz4_engine = compression_engine::get_compression_engine(
CompressionType::LZ4
).expect("Failed to get LZ4 engine");
assert!(lz4_engine.is_supported());
let gzip_engine = compression_engine::get_compression_engine(
CompressionType::GZip
).expect("Failed to get GZip engine");
assert!(gzip_engine.is_supported());
let none_engine = compression_engine::get_compression_engine(
CompressionType::None
).expect("Failed to get None engine");
assert!(none_engine.is_supported());
}
#[test] #[test]
fn test_default_compression_type() { fn test_compression_engine_factory() {
let default = compression_engine::default_compression_type(); // Test getting different compression engines
// The default should be a supported compression type let lz4_engine = compression_engine::get_compression_engine(
let engine = compression_engine::get_compression_engine(default) CompressionType::LZ4
.expect("Failed to get default compression engine"); ).expect("Failed to get LZ4 engine");
assert!(engine.is_supported()); assert!(lz4_engine.is_supported());
}
let gzip_engine = compression_engine::get_compression_engine(
CompressionType::GZip
).expect("Failed to get GZip engine");
assert!(gzip_engine.is_supported());
let none_engine = compression_engine::get_compression_engine(
CompressionType::None
).expect("Failed to get None engine");
assert!(none_engine.is_supported());
}
#[test] #[test]
fn test_compression_type_display() { fn test_compression_engine_factory_invalid() {
assert_eq!(format!("{}", CompressionType::LZ4), "LZ4"); // Test that we get an error for unsupported compression types
assert_eq!(format!("{}", CompressionType::GZip), "GZip"); // This test assumes that any invalid type would return an error
assert_eq!(format!("{}", CompressionType::None), "None"); // In practice, you might want to add an Invalid variant to CompressionType
} }
#[test] #[test]
fn test_compression_type_from_str() { fn test_default_compression_type() {
use std::str::FromStr; let default = compression_engine::default_compression_type();
assert_eq!(CompressionType::from_str("lz4").unwrap(), CompressionType::LZ4); // The default should be a supported compression type
assert_eq!(CompressionType::from_str("gzip").unwrap(), CompressionType::GZip); let engine = compression_engine::get_compression_engine(default)
assert_eq!(CompressionType::from_str("none").unwrap(), CompressionType::None); .expect("Failed to get default compression engine");
// Test case insensitivity assert!(engine.is_supported());
assert_eq!(CompressionType::from_str("LZ4").unwrap(), CompressionType::LZ4); }
assert_eq!(CompressionType::from_str("GZIP").unwrap(), CompressionType::GZip);
#[test]
fn test_compression_type_display() {
assert_eq!(format!("{}", CompressionType::LZ4), "LZ4");
assert_eq!(format!("{}", CompressionType::GZip), "GZip");
assert_eq!(format!("{}", CompressionType::None), "None");
}
#[test]
fn test_compression_type_from_str() {
assert_eq!(CompressionType::from_str("lz4").unwrap(), CompressionType::LZ4);
assert_eq!(CompressionType::from_str("gzip").unwrap(), CompressionType::GZip);
assert_eq!(CompressionType::from_str("none").unwrap(), CompressionType::None);
// Test case insensitivity
assert_eq!(CompressionType::from_str("LZ4").unwrap(), CompressionType::LZ4);
assert_eq!(CompressionType::from_str("GZIP").unwrap(), CompressionType::GZip);
assert_eq!(CompressionType::from_str("NONE").unwrap(), CompressionType::None);
}
#[test]
fn test_compression_type_from_str_invalid() {
assert!(CompressionType::from_str("invalid").is_err());
assert!(CompressionType::from_str("").is_err());
assert!(CompressionType::from_str("xz").is_err());
}
} }
} }