mirror of
git://git.proxmox.com/git/proxmox-backup.git
synced 2025-01-03 01:18:02 +03:00
pxar: bin: rework and dynamically generate list
test data
Commit f16c5de757
("pxar: bin: test `pxar list` with payload-input")
introduced a regression test for listing of split pxar archives. This
test relies on a large pxar blob file, the large size (> 100M) being
overlooked when writing the test.
In order to not depend on this file any further in the future, drop
it and rewrite the test to dynamically generate the files, needed and
further extend the test thereby also cover the archive creation and
extraction for split pxar archives.
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
d1a5855e74
commit
0415304ca4
@ -82,7 +82,10 @@ fn pxar_create_and_extract() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pxar_list_with_payload_input() {
|
||||
fn pxar_split_archive_test() {
|
||||
let src_dir = "../tests/catar_data/test_files_and_subdirs/";
|
||||
let dest_dir = "../tests/catar_data/test_files_and_subdirs_dest/";
|
||||
|
||||
let target_subdir = std::env::var("DEB_HOST_RUST_TYPE").unwrap_or_default();
|
||||
|
||||
let exec_path = if cfg!(debug_assertions) {
|
||||
@ -91,129 +94,88 @@ fn pxar_list_with_payload_input() {
|
||||
format!("../target/{target_subdir}/release/pxar")
|
||||
};
|
||||
|
||||
let output = Command::new(exec_path)
|
||||
.args([
|
||||
"list",
|
||||
"../tests/pxar/backup-client-pxar-expected.mpxar",
|
||||
"--payload-input",
|
||||
"../tests/pxar/backup-client-pxar-expected.ppxar",
|
||||
])
|
||||
println!("run '{exec_path} create archive.mpxar {src_dir} --payload-output archive.ppxar'");
|
||||
|
||||
Command::new(&exec_path)
|
||||
.arg("create")
|
||||
.arg("./tests/archive.mpxar")
|
||||
.arg(src_dir)
|
||||
.arg("--payload-output=./tests/archive.ppxar")
|
||||
.status()
|
||||
.unwrap_or_else(|err| panic!("Failed to invoke '{exec_path}': {err}"));
|
||||
|
||||
let output = Command::new(&exec_path)
|
||||
.arg("list")
|
||||
.arg("./tests/archive.mpxar")
|
||||
.arg("--payload-input=./tests/archive.ppxar")
|
||||
.output()
|
||||
.expect("failed to run pxar list");
|
||||
assert!(output.status.success());
|
||||
|
||||
let expected = "\"/\"
|
||||
\"/folder_0\"
|
||||
\"/folder_0/file_0\"
|
||||
\"/folder_0/file_1\"
|
||||
\"/folder_0/file_2\"
|
||||
\"/folder_0/file_3\"
|
||||
\"/folder_0/file_4\"
|
||||
\"/folder_0/file_5\"
|
||||
\"/folder_0/file_6\"
|
||||
\"/folder_0/file_7\"
|
||||
\"/folder_0/file_8\"
|
||||
\"/folder_0/file_9\"
|
||||
\"/folder_1\"
|
||||
\"/folder_1/file_0\"
|
||||
\"/folder_1/file_1\"
|
||||
\"/folder_1/file_2\"
|
||||
\"/folder_1/file_3\"
|
||||
\"/folder_1/file_4\"
|
||||
\"/folder_1/file_5\"
|
||||
\"/folder_1/file_6\"
|
||||
\"/folder_1/file_7\"
|
||||
\"/folder_1/file_8\"
|
||||
\"/folder_1/file_9\"
|
||||
\"/folder_2\"
|
||||
\"/folder_2/file_0\"
|
||||
\"/folder_2/file_1\"
|
||||
\"/folder_2/file_2\"
|
||||
\"/folder_2/file_3\"
|
||||
\"/folder_2/file_4\"
|
||||
\"/folder_2/file_5\"
|
||||
\"/folder_2/file_6\"
|
||||
\"/folder_2/file_7\"
|
||||
\"/folder_2/file_8\"
|
||||
\"/folder_2/file_9\"
|
||||
\"/folder_3\"
|
||||
\"/folder_3/file_0\"
|
||||
\"/folder_3/file_1\"
|
||||
\"/folder_3/file_2\"
|
||||
\"/folder_3/file_3\"
|
||||
\"/folder_3/file_4\"
|
||||
\"/folder_3/file_5\"
|
||||
\"/folder_3/file_6\"
|
||||
\"/folder_3/file_7\"
|
||||
\"/folder_3/file_8\"
|
||||
\"/folder_3/file_9\"
|
||||
\"/folder_4\"
|
||||
\"/folder_4/file_0\"
|
||||
\"/folder_4/file_1\"
|
||||
\"/folder_4/file_2\"
|
||||
\"/folder_4/file_3\"
|
||||
\"/folder_4/file_4\"
|
||||
\"/folder_4/file_5\"
|
||||
\"/folder_4/file_6\"
|
||||
\"/folder_4/file_7\"
|
||||
\"/folder_4/file_8\"
|
||||
\"/folder_4/file_9\"
|
||||
\"/folder_5\"
|
||||
\"/folder_5/file_0\"
|
||||
\"/folder_5/file_1\"
|
||||
\"/folder_5/file_2\"
|
||||
\"/folder_5/file_3\"
|
||||
\"/folder_5/file_4\"
|
||||
\"/folder_5/file_5\"
|
||||
\"/folder_5/file_6\"
|
||||
\"/folder_5/file_7\"
|
||||
\"/folder_5/file_8\"
|
||||
\"/folder_5/file_9\"
|
||||
\"/folder_6\"
|
||||
\"/folder_6/file_0\"
|
||||
\"/folder_6/file_1\"
|
||||
\"/folder_6/file_2\"
|
||||
\"/folder_6/file_3\"
|
||||
\"/folder_6/file_4\"
|
||||
\"/folder_6/file_5\"
|
||||
\"/folder_6/file_6\"
|
||||
\"/folder_6/file_7\"
|
||||
\"/folder_6/file_8\"
|
||||
\"/folder_6/file_9\"
|
||||
\"/folder_7\"
|
||||
\"/folder_7/file_0\"
|
||||
\"/folder_7/file_1\"
|
||||
\"/folder_7/file_2\"
|
||||
\"/folder_7/file_3\"
|
||||
\"/folder_7/file_4\"
|
||||
\"/folder_7/file_5\"
|
||||
\"/folder_7/file_6\"
|
||||
\"/folder_7/file_7\"
|
||||
\"/folder_7/file_8\"
|
||||
\"/folder_7/file_9\"
|
||||
\"/folder_8\"
|
||||
\"/folder_8/file_0\"
|
||||
\"/folder_8/file_1\"
|
||||
\"/folder_8/file_2\"
|
||||
\"/folder_8/file_3\"
|
||||
\"/folder_8/file_4\"
|
||||
\"/folder_8/file_5\"
|
||||
\"/folder_8/file_6\"
|
||||
\"/folder_8/file_7\"
|
||||
\"/folder_8/file_8\"
|
||||
\"/folder_8/file_9\"
|
||||
\"/folder_9\"
|
||||
\"/folder_9/file_0\"
|
||||
\"/folder_9/file_1\"
|
||||
\"/folder_9/file_2\"
|
||||
\"/folder_9/file_3\"
|
||||
\"/folder_9/file_4\"
|
||||
\"/folder_9/file_5\"
|
||||
\"/folder_9/file_6\"
|
||||
\"/folder_9/file_7\"
|
||||
\"/folder_9/file_8\"
|
||||
\"/folder_9/file_9\"
|
||||
\"/a-test-symlink\"
|
||||
\"/file1\"
|
||||
\"/file2\"
|
||||
\"/subdir1\"
|
||||
\"/subdir1/subfile1\"
|
||||
\"/subdir1/subfile2\"
|
||||
";
|
||||
|
||||
assert_eq!(expected.as_bytes(), output.stdout);
|
||||
|
||||
println!("run '{exec_path} extract archive.mpxar {dest_dir} --payload-input archive.ppxar'");
|
||||
|
||||
Command::new(&exec_path)
|
||||
.arg("extract")
|
||||
.arg("./tests/archive.mpxar")
|
||||
.arg("--payload-input=./tests/archive.ppxar")
|
||||
.arg("--target")
|
||||
.arg(dest_dir)
|
||||
.status()
|
||||
.unwrap_or_else(|err| panic!("Failed to invoke '{exec_path}': {err}"));
|
||||
|
||||
println!("run 'rsync --dry-run --itemize-changes --archive {src_dir} {dest_dir}' to verify'");
|
||||
|
||||
/* 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("--archive")
|
||||
.arg(src_dir)
|
||||
.arg(dest_dir)
|
||||
.stdout(Stdio::piped())
|
||||
.spawn()
|
||||
.unwrap()
|
||||
.stdout
|
||||
.unwrap();
|
||||
|
||||
let reader = BufReader::new(stdout);
|
||||
let line_iter = reader.lines().map(|l| l.unwrap());
|
||||
let mut linecount = 0;
|
||||
for curr in line_iter {
|
||||
println!("{curr}");
|
||||
linecount += 1;
|
||||
}
|
||||
println!("Rsync listed {linecount} differences to address");
|
||||
|
||||
// Cleanup archive
|
||||
Command::new("rm")
|
||||
.arg("./tests/archive.mpxar")
|
||||
.arg("./tests/archive.ppxar")
|
||||
.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 invocation should yield no lines.
|
||||
if linecount != 0 {
|
||||
panic!("pxar create and extract did not yield the same contents");
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user