asar-rust 0.1.0

Rust port of @electron/asar — create and extract Electron ASAR archives
Documentation
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);
}