use crate::common::*;
#[test]
fn list_and_test_refuse_a_bomb_tar_gz_at_a_tight_max_ratio() {
let dir = tmp_dir();
let bomb = write_bomb_tar_gz(&dir);
let list_out = run_output(&["list", bomb.to_str().unwrap(), "--max-ratio", "100"]);
assert_eq!(
list_out.status.code(),
Some(6),
"list stderr: {}",
String::from_utf8_lossy(&list_out.stderr)
);
let list_err = String::from_utf8_lossy(&list_out.stderr);
assert!(
list_err.contains("100") && list_err.contains("--max-ratio"),
"must name the limit and the flag, matching how decompress reports it: {list_err}"
);
let test_out = run_output(&["test", bomb.to_str().unwrap(), "--max-ratio", "100"]);
assert_eq!(
test_out.status.code(),
Some(6),
"test stderr: {}",
String::from_utf8_lossy(&test_out.stderr)
);
let test_err = String::from_utf8_lossy(&test_out.stderr);
assert!(
test_err.contains("100") && test_err.contains("--max-ratio"),
"must name the limit and the flag: {test_err}"
);
}
#[test]
fn raising_max_ratio_lets_the_bomb_through() {
let dir = tmp_dir();
let bomb = write_bomb_tar_gz(&dir);
let list_out = run_output(&["list", bomb.to_str().unwrap(), "--max-ratio", "100000"]);
assert!(
list_out.status.success(),
"list stderr: {}",
String::from_utf8_lossy(&list_out.stderr)
);
let test_out = run_output(&["test", bomb.to_str().unwrap(), "--max-ratio", "100000"]);
assert!(
test_out.status.success(),
"test stderr: {}",
String::from_utf8_lossy(&test_out.stderr)
);
}
#[test]
fn a_legitimately_compressible_tar_gz_is_not_refused_at_the_default_ratio() {
let dir = tmp_dir();
let text = "the quick brown fox jumps over the lazy dog\n".repeat(200_000);
let archive = write_fixture_tar_gz(&dir, "legit.tar.gz", &[("log.txt", text.as_bytes())]);
let list_out = run_output(&["list", archive.to_str().unwrap()]);
assert!(
list_out.status.success(),
"a legitimately compressible archive must not be refused at the default ratio: {}",
String::from_utf8_lossy(&list_out.stderr)
);
assert!(
String::from_utf8(list_out.stdout)
.unwrap()
.contains("log.txt")
);
let test_out = run_output(&["test", archive.to_str().unwrap()]);
assert!(
test_out.status.success(),
"a legitimately compressible archive must not be refused at the default ratio: {}",
String::from_utf8_lossy(&test_out.stderr)
);
}