mod read;
pub use read::*;
mod read_error;
pub use read_error::*;
mod write;
pub use write::*;
mod write_error;
pub use write_error::*;
#[cfg(test)]
mod tests {
use rand::{RngCore, SeedableRng, rngs::SmallRng};
use tempdir::TempDir;
use super::*;
#[test]
fn test_multi_file_pack() {
let mut rng = SmallRng::from_rng(&mut rand::rng());
let mut mock_file_1: Vec<u8> = vec![0; 100 * 1024];
rng.fill_bytes(&mut mock_file_1);
let mut mock_file_2: Vec<u8> = vec![0; 200 * 1024];
rng.fill_bytes(&mut mock_file_2);
let mut mock_file_3: Vec<u8> = vec![0; 300 * 1024];
rng.fill_bytes(&mut mock_file_3);
let dir = TempDir::new("test_pmv_encryption_rs").unwrap();
let file_path = dir.path().join("m_1.pma");
let mut write_stream = MultiFilePackWriteStream::new(&file_path, 3).unwrap();
write_stream.write_file(&mock_file_1).unwrap();
write_stream.write_file(&mock_file_2).unwrap();
write_stream.write_file(&mock_file_3).unwrap();
write_stream.close();
let mut read_stream = MultiFilePackReadStream::new(&file_path).unwrap();
assert_eq!(read_stream.get_file_count(), 3);
let mock_file_2_r = read_stream.get_file(1).unwrap();
assert!(mock_file_2.iter().eq(mock_file_2_r.iter()));
let mock_file_1_r = read_stream.get_file(0).unwrap();
assert!(mock_file_1.iter().eq(mock_file_1_r.iter()));
let mock_file_3_r = read_stream.get_file(2).unwrap();
assert!(mock_file_3.iter().eq(mock_file_3_r.iter()));
assert!(matches!(
read_stream.get_file(3),
Err(MultiFilePackReadError::IndexOutOfBounds)
));
read_stream.close();
}
}