Skip to content

Commit

Permalink
brro-compressor e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
worryg0d committed Sep 5, 2024
1 parent d3c36d0 commit 0f7da91
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 0 deletions.
109 changes: 109 additions & 0 deletions brro-compressor/tests/e2e.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
use std::fs;
use std::path::PathBuf;
use wavbrro::wavbrro::WavBrro;

const TEST_FILE_NAME: &str = "go_gc_heap_goal_bytes.wbro";
const TEST_COMPRESSED_FILE_NAME: &str = "go_gc_heap_goal_bytes.bro";
const TEST_WBRO_PATH: &str = "tests/wbros/go_gc_heap_goal_bytes.wbro";

#[test]
fn test_compressor_idw() {
test_lossless_compression("idw")
}

#[test]
fn test_compressor_polynomial() {
test_lossless_compression("polynomial")
}

#[test]
fn test_compressor_auto() {
test_lossless_compression("auto")
}

#[test]
fn test_compressor_fft() {
test_lossless_compression("fft")
}

#[test]
fn test_compressor_noop() {
test_lossless_compression("noop")
}

fn test_lossless_compression(compressor: &str) {
test_compression(compressor)
}

#[test]
fn test_compressor_constant() {
// tests/wbros/uptime.wbro constant data which can be compressed by constant compressor
let test_dir = tempfile::tempdir().unwrap().into_path();
fs::copy("tests/wbros/uptime.wbro", test_dir.join("uptime.wbro")).unwrap();

run_compressor(&[
"--compressor",
"noop",
test_dir.join("uptime.wbro").to_str().unwrap(),
]);

run_compressor(&["-u", test_dir.join("uptime.bro").to_str().unwrap()]);

compare_samples(
&PathBuf::from("tests/wbros/uptime.wbro"),
&test_dir.join("uptime.wbro"),
)
}

/// Runs compression and decompression test for a specified compressor.
/// max_error is an error level, compression speed is set as the lowest (0).
///
/// It compresses tests/wbros/go_gc_duration_count.wbro file, decompresses
/// got .bro file, and compares the original .wbro and the decompressed one.
fn test_compression(compressor: &str) {
let test_dir = prepare_test_dir();

// Running data compression
run_compressor(&[
"--compressor",
compressor,
"--error",
"0",
test_dir.join(TEST_FILE_NAME).to_str().unwrap(),
]);

// Running data decompression
run_compressor(&[
"-u",
test_dir.join(TEST_COMPRESSED_FILE_NAME).to_str().unwrap(),
]);

compare_samples(
&PathBuf::from(TEST_WBRO_PATH),
&test_dir.join(TEST_FILE_NAME),
)
}

/// Prepares test directory and copies test wbro file there.
fn prepare_test_dir() -> PathBuf {
let test_dir = tempfile::tempdir().unwrap().into_path();
fs::copy(TEST_WBRO_PATH, test_dir.join(TEST_FILE_NAME)).unwrap();
test_dir
}

/// Runs compressor binary with provided arguments.
fn run_compressor(args: &[&str]) {
let compressor_bin = env!("CARGO_BIN_EXE_brro-compressor");
let exit_status = std::process::Command::new(compressor_bin)
.args(args)
.status()
.unwrap();

assert!(exit_status.success());
}

fn compare_samples(original: &PathBuf, uncompressed: &PathBuf) {
let original_samples = WavBrro::from_file(original).unwrap();
let uncompressed_samples = WavBrro::from_file(uncompressed).unwrap();
assert_eq!(original_samples, uncompressed_samples);
}
Binary file not shown.
Binary file not shown.

0 comments on commit 0f7da91

Please sign in to comment.