use asar_rust::integrity::FileIntegrity;
#[test]
fn test_integrity_from_empty_buffer() {
let integrity = FileIntegrity::from_buffer(&[]);
assert_eq!(integrity.algorithm, "SHA256");
assert_eq!(integrity.block_size, 4 * 1024 * 1024);
assert_eq!(integrity.blocks.len(), 1);
}
#[test]
fn test_integrity_from_small_buffer() {
let data = b"hello world";
let integrity = FileIntegrity::from_buffer(data);
assert_eq!(integrity.algorithm, "SHA256");
assert_eq!(integrity.blocks.len(), 1);
assert!(integrity.hash.chars().all(|c| c.is_ascii_hexdigit()));
assert_eq!(integrity.hash.len(), 64);
}
#[test]
fn test_integrity_from_reader() {
let data = b"some test data for streaming hash";
let mut reader = std::io::Cursor::new(data);
let integrity = FileIntegrity::from_reader(&mut reader).unwrap();
assert_eq!(integrity.blocks.len(), 1);
let buf_integrity = FileIntegrity::from_buffer(data);
assert_eq!(integrity.hash, buf_integrity.hash);
assert_eq!(integrity.blocks, buf_integrity.blocks);
}
#[test]
fn test_integrity_deterministic() {
let data = b"deterministic test";
let a = FileIntegrity::from_buffer(data);
let b = FileIntegrity::from_buffer(data);
assert_eq!(a.hash, b.hash);
assert_eq!(a.blocks, b.blocks);
}
#[test]
fn test_integrity_large_data_multiple_blocks() {
let block_size = 4 * 1024 * 1024;
let data = vec![0xABu8; block_size + 100];
let integrity = FileIntegrity::from_buffer(&data);
assert_eq!(integrity.blocks.len(), 2);
}