From: Gabriel Goller <g.goller@proxmox.com>
To: Proxmox Backup Server development discussion
<pbs-devel@lists.proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup] pxar: bin: rework and dynamically generate `list` test data
Date: Thu, 12 Sep 2024 15:35:39 +0200 [thread overview]
Message-ID: <20240912133539.yiwj2i6sz24bhzbr@luna.proxmox.com> (raw)
In-Reply-To: <20240910102830.142201-1-c.ebner@proxmox.com>
On 10.09.2024 12:28, Christian Ebner wrote:
>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>
>---
> pxar-bin/tests/pxar.rs | 210 ++++++++-----------
> tests/pxar/backup-client-pxar-expected.ppxar | Bin 104859264 -> 0 bytes
> 2 files changed, 92 insertions(+), 118 deletions(-)
> delete mode 100644 tests/pxar/backup-client-pxar-expected.ppxar
>
>diff --git a/pxar-bin/tests/pxar.rs b/pxar-bin/tests/pxar.rs
>index e15c2e647..a1fde4b60 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/";
>+ let dest_dir = "../tests/catar_data/";
>+
> let target_subdir = std::env::var("DEB_HOST_RUST_TYPE").unwrap_or_default();
>
> let exec_path = if cfg!(debug_assertions) {
>@@ -91,129 +94,100 @@ 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\"
>+\"/test_file\"
>+\"/test_file/file1\"
>+\"/test_files_and_subdirs\"
>+\"/test_files_and_subdirs/a-test-symlink\"
>+\"/test_files_and_subdirs/file1\"
>+\"/test_files_and_subdirs/file2\"
>+\"/test_files_and_subdirs/subdir1\"
>+\"/test_files_and_subdirs/subdir1/subfile1\"
>+\"/test_files_and_subdirs/subdir1/subfile2\"
>+\"/test_goodbye_sort_order\"
>+\"/test_goodbye_sort_order/file1\"
>+\"/test_goodbye_sort_order/file2\"
>+\"/test_goodbye_sort_order/file3\"
>+\"/test_goodbye_sort_order/file4\"
>+\"/test_symlink\"
>+\"/test_symlink/symlink1\"
>+\"/test_xattrs_src\"
>+\"/test_xattrs_src/file.txt\"
> ";
>
> 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");
>+ }
> }
Both tests do not work for me. It seems that the test folders/files are
missing?
And also:
- the `catar_data` folder does not exist, the tests need to create it
(and delete afterwords)
- the `pxar_split_archive_test` test does not correctly clean up
afterwards and leaves the two ppxar and mpxar files in the `tests`
folder.
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
next parent reply other threads:[~2024-09-12 13:36 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240910102830.142201-1-c.ebner@proxmox.com>
2024-09-12 13:35 ` Gabriel Goller [this message]
2024-09-12 13:46 ` Gabriel Goller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240912133539.yiwj2i6sz24bhzbr@luna.proxmox.com \
--to=g.goller@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.