in common/rusty_leveldb_sgx/src/log.rs [296:337]
fn test_reader() {
let data = vec![
"abcdefghi".as_bytes().to_vec(), // fits one block of 17
"123456789012".as_bytes().to_vec(), // spans two blocks of 17
"0101010101010101010101".as_bytes().to_vec(),
]; // spans three blocks of 17
let mut lw = LogWriter::new(Vec::new());
lw.block_size = super::HEADER_SIZE + 10;
for e in data.iter() {
assert!(lw.add_record(e).is_ok());
}
assert_eq!(lw.dst.len(), 93);
// Corrupt first record.
lw.dst[2] += 1;
let mut lr = LogReader::new(lw.dst.as_slice(), true);
lr.blocksize = super::HEADER_SIZE + 10;
let mut dst = Vec::with_capacity(128);
// First record is corrupted.
assert_eq!(
err(StatusCode::Corruption, "Invalid Checksum"),
lr.read(&mut dst)
);
let mut i = 1;
loop {
let r = lr.read(&mut dst);
if !r.is_ok() {
panic!("{}", r.unwrap_err());
} else if r.unwrap() == 0 {
break;
}
assert_eq!(dst, data[i]);
i += 1;
}
assert_eq!(i, data.len());
}