diff --git a/pxar-bin/tests/pxar.rs b/pxar-bin/tests/pxar.rs index e15c2e64..2da02990 100644 --- a/pxar-bin/tests/pxar.rs +++ b/pxar-bin/tests/pxar.rs @@ -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"); + } } diff --git a/tests/pxar/backup-client-pxar-expected.ppxar b/tests/pxar/backup-client-pxar-expected.ppxar deleted file mode 100644 index dc35e6c4..00000000 Binary files a/tests/pxar/backup-client-pxar-expected.ppxar and /dev/null differ