Skip to content

Commit

Permalink
Make partial decompression test work with both zlib and miniz_oxide
Browse files Browse the repository at this point in the history
  • Loading branch information
link2xt committed Oct 8, 2024
1 parent 8769362 commit 57425a6
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions tests/decompress_chunk.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
#[test]
fn deflate_decoder_partial() {
// Decompresses to
// "* QUOTAROOT INBOX \"User quota\"\r\n* QUOTA \"User quota\" (STORAGE 76 307200)\r\nA0001 OK Getquotaroot completed (0.001 + 0.000 secs).\r\n"
let input = vec![
210, 82, 8, 12, 245, 15, 113, 12, 242, 247, 15, 81, 240, 244, 115, 242, 143, 80, 80, 10,
45, 78, 45, 82, 40, 44, 205, 47, 73, 84, 226, 229, 210, 130, 200, 163, 136, 42, 104, 4,
Expand All @@ -10,19 +8,32 @@ fn deflate_decoder_partial() {
231, 22, 228, 164, 150, 164, 166, 40, 104, 24, 232, 129, 20, 104, 43, 128, 104, 3, 133,
226, 212, 228, 98, 77, 61, 94, 46, 0, 0, 0, 0, 255, 255,
];
let expected_output = b"* QUOTAROOT INBOX \"User quota\"\r\n* QUOTA \"User quota\" (STORAGE 76 307200)\r\nA0001 OK Getquotaroot completed (0.001 + 0.000 secs).\r\n";

// Create very small output buffer.
let mut output = vec![0; 8];
let mut output_buf = [0; 8];
let mut output: Vec<u8> = Vec::new();

let zlib_header = false;
let mut decompress = flate2::Decompress::new(zlib_header);

let flush_decompress = flate2::FlushDecompress::None;
let status = decompress
.decompress(&input, &mut output, flush_decompress)
.unwrap();
assert_eq!(status, flate2::Status::Ok);
loop {
let prev_out = decompress.total_out();
let status = decompress
.decompress(&input[decompress.total_in() as usize..], &mut output_buf, flush_decompress)
.unwrap();
let output_len = decompress.total_out() - prev_out;
output.extend_from_slice(&output_buf[..output_len as usize]);
eprintln!("{}", output.len());

// Should not consume everything, there is not enough space in the buffer for the output.
assert_ne!(decompress.total_in(), input.len() as u64);
// IMAP stream never ends.
assert_ne!(status, flate2::Status::StreamEnd);

if status == flate2::Status::BufError && output_len == 0 {
break;
}
}

assert_eq!(output.as_slice(), expected_output);
}

0 comments on commit 57425a6

Please sign in to comment.