in shed/async_compression/src/test.rs [191:239]
fn check_overreading(c_type: CompressorType, data: &[u8], extra: &[u8]) -> TestResult {
const EXTRA_SPACE: usize = 8;
let mut decompressor = {
let mut compressor = Compressor::new(Cursor::new(Vec::new()), c_type);
compressor.write_all(data).unwrap();
compressor.flush().unwrap();
let mut compressed = compressor.try_finish().unwrap().into_inner();
for u in extra {
compressed.push(*u);
}
Decompressor::new(
BufReader::new(Cursor::new(compressed)),
c_type.decompressor_type(),
)
};
{
let mut buf = vec![0u8; data.len() + extra.len() + EXTRA_SPACE];
let mut expected = Vec::new();
expected.extend_from_slice(data);
expected.extend_from_slice(vec![0u8; extra.len() + EXTRA_SPACE].as_slice());
if !(decompressor.read(buf.as_mut_slice()).unwrap() == data.len() && buf == expected) {
return TestResult::error(format!("decoding failed, buf: {:?}", buf));
}
}
{
let mut buf = vec![0u8; data.len() + extra.len() + EXTRA_SPACE];
if !(decompressor.read(buf.as_mut_slice()).unwrap() == 0 && buf == vec![0u8; buf.len()]) {
return TestResult::error(format!("detecting eof failed, buf: {:?}", buf));
}
}
{
let mut buf = Vec::new();
let mut remainder = decompressor.into_inner();
if !(remainder.read_to_end(&mut buf).unwrap() == extra.len() && buf.as_slice() == extra) {
return TestResult::error(format!("leaving remainder failed, buf: {:?}", buf));
}
}
TestResult::passed()
}