From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 815811FF163 for ; Thu, 12 Sep 2024 15:36:13 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3BE6C3246A; Thu, 12 Sep 2024 15:36:15 +0200 (CEST) Date: Thu, 12 Sep 2024 15:35:39 +0200 From: Gabriel Goller To: Proxmox Backup Server development discussion Message-ID: <20240912133539.yiwj2i6sz24bhzbr@luna.proxmox.com> References: <20240910102830.142201-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240910102830.142201-1-c.ebner@proxmox.com> User-Agent: NeoMutt/20220429 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.045 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox-backup] pxar: bin: rework and dynamically generate `list` test data X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" 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 >--- > 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