proxmox-backup/tests/pxar.rs

82 lines
2.2 KiB
Rust
Raw Normal View History

use std::io::{BufRead, BufReader};
use std::process::{Command, Stdio};
// Test if xattrs are correctly archived and restored
#[test]
fn pxar_create_and_extract() {
let src_dir = "./tests/catar_data/test_xattrs_src/";
let dest_dir = "./tests/catar_data/test_xattrs_dest/";
let exec_path = if cfg!(debug_assertions) {
"./target/debug/pxar"
} else {
"./target/release/pxar"
};
println!("run '{} create archive.pxar {}'", exec_path, src_dir);
Command::new(exec_path)
.arg("create")
.arg("./tests/archive.pxar")
.arg(src_dir)
.status()
.unwrap_or_else(|err| {
panic!("Failed to invoke '{}': {}", exec_path, err)
});
Command::new(exec_path)
.arg("extract")
.arg("./tests/archive.pxar")
.arg(dest_dir)
.status()
.unwrap_or_else(|err| {
panic!("Failed to invoke '{}': {}", exec_path, err)
});
/* Use rsync with --dry-run and --itemize-changes to compare
src_dir and dest_dir */
let stdout = Command::new("rsync")
.arg("--dry-run")
.arg("--itemize-changes")
.arg("--recursive")
.arg("--acls")
.arg("--xattrs")
.arg("--owner")
.arg("--group")
.arg("--hard-links")
.arg(src_dir)
.arg(dest_dir)
.stdout(Stdio::piped())
.spawn()
.unwrap()
.stdout
.unwrap();
let reader = BufReader::new(stdout);
let linecount = reader.lines().fold(0, |count, _| count + 1 );
println!("Rsync listed {} differences to address", linecount);
// Cleanup archive
Command::new("rm")
.arg("./tests/archive.pxar")
.status()
.unwrap_or_else(|err| {
panic!("Failed to invoke 'rm': {}", err)
});
// Cleanup destination dir
Command::new("rm")
.arg("-r")
.arg(dest_dir)
.status()
.unwrap_or_else(|err| {
panic!("Failed to invoke 'rm': {}", err)
});
// If source and destination folder contain the same content,
// the output of the rsync invokation should yield no lines.
if linecount != 0 {
panic!("pxar create and extract did not yield the same contents");
}
}