wal-rs 1.0.2

Write-ahead-log implementation
Documentation
use mock::{random_bytes, Home};
use segment::Segment;
use std::path::Path;

#[test]
fn test_create_destory() {
    let testhome = Home::new("testdir");

    let mut seq = Segment::open(&testhome.dir(), 1, 0, true).unwrap();
    let fname = Path::new(&testhome.dir()).join(Segment::filename(1));

    assert!(fname.exists() && fname.is_file());

    seq.destory();

    assert!(!fname.exists());
}

#[test]
fn test_read_write() {
    let testhome = Home::new("testdir");

    let mut seq = Segment::open(&testhome.dir(), 1, 0, true).unwrap();

    let buf_vec = random_bytes(1024);
    let buf = buf_vec.as_slice();

    let mut written: usize = 0;
    while written < buf.len() {
        seq.write(&buf[..written + 1]).unwrap();
        written += 1;
    }

    assert_eq!(seq.len(), buf.len());

    let mut data: Vec<Vec<u8>> = Vec::with_capacity(1024);

    let read = seq.read_into(0, buf.len() + 1, &mut data, true).unwrap();
    assert_eq!(read, buf.len());
    assert_eq!(data.len(), buf.len());

    for (i, v) in data.iter().enumerate() {
        assert_eq!((i + 1) as usize, v.len());
        assert_eq!(&buf[..(i + 1) as usize].to_vec(), v);
    }

    data.clear();

    let read2 = seq.read_into(255, 100, &mut data, true).unwrap();
    assert_eq!(read2, 100);
    assert_eq!(data.len(), 100);

    for (i, v) in data.iter().enumerate() {
        assert_eq!((i + 255 + 1) as usize, v.len());
        assert_eq!(&buf[..(i + 255 + 1) as usize].to_vec(), v);
    }
}

#[test]
fn test_write_overlimit() {
    let testhome = Home::new("testdir");

    let mut seq = Segment::open(&testhome.dir(), 1, 128, true).unwrap();

    let buf_vec = random_bytes(128);
    let buf = buf_vec.as_slice();

    let mut written: usize = 0;
    while written < buf.len() {
        seq.write(&buf[..written + 1]).unwrap();
        written += 1;
    }

    assert_eq!(seq.len(), buf.len());

    match seq.write(&buf) {
        Ok(false) => {}
        _ => panic!("expecting error `entry limit exceeded`"),
    }
}