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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox