From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 092951FF13B for ; Wed, 22 Apr 2026 13:19:34 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 79B2E1A012; Wed, 22 Apr 2026 13:15:10 +0200 (CEST) From: "Max R. Carrara" To: pve-devel@lists.proxmox.com Subject: [PATCH pve-storage v1 44/54] test: parse volname: parameterize test case creation for some vtypes Date: Wed, 22 Apr 2026 13:13:10 +0200 Message-ID: <20260422111322.257380-45-m.carrara@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260422111322.257380-1-m.carrara@proxmox.com> References: <20260422111322.257380-1-m.carrara@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1776856362986 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.083 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 Message-ID-Hash: UUTS5NFBXXVRGJVSEYTBARIWUMLAQFBI X-Message-ID-Hash: UUTS5NFBXXVRGJVSEYTBARIWUMLAQFBI X-MailFrom: m.carrara@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Currently, a lot of test cases are simply defined as part of the overall list of tests. While this is completely fine in itself, it does not scale if one wants to add cases that account for additional parameters in the future. Therefore, create a lot of existing test cases in blocks and push them onto the list of test cases, instead of defining them up front. Note that we already do this for test cases regarding VM disk / backup file volume names. This is done as a preparational step for future commits, primarily in order to avoid writing a lot of test cases by hand. Signed-off-by: Max R. Carrara --- src/test/parse_volname_test.pm | 226 ++++++++++++++++----------------- 1 file changed, 108 insertions(+), 118 deletions(-) diff --git a/src/test/parse_volname_test.pm b/src/test/parse_volname_test.pm index fb300ad5..1dcec9d6 100644 --- a/src/test/parse_volname_test.pm +++ b/src/test/parse_volname_test.pm @@ -34,70 +34,6 @@ my $tests = [ ], }, # - # iso - # - { - description => 'ISO image, iso', - volname => 'iso/some-installation-disk.iso', - expected => ['iso', 'some-installation-disk.iso', undef, undef, undef, undef, 'raw'], - }, - { - description => 'ISO image, img', - volname => 'iso/some-other-installation-disk.img', - expected => - ['iso', 'some-other-installation-disk.img', undef, undef, undef, undef, 'raw'], - }, - # - # container templates - # - { - description => 'Container template tar', - volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar', - expected => [ - 'vztmpl', 'debian-10.0-standard_10.0-1_amd64.tar', undef, undef, undef, undef, - 'raw', - ], - }, - { - description => 'Container template tar.gz', - volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz', - expected => [ - 'vztmpl', - 'debian-10.0-standard_10.0-1_amd64.tar.gz', - undef, - undef, - undef, - undef, - 'raw', - ], - }, - { - description => 'Container template tar.xz', - volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.xz', - expected => [ - 'vztmpl', - 'debian-10.0-standard_10.0-1_amd64.tar.xz', - undef, - undef, - undef, - undef, - 'raw', - ], - }, - { - description => 'Container template tar.bz2', - volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.bz2', - expected => [ - 'vztmpl', - 'debian-10.0-standard_10.0-1_amd64.tar.bz2', - undef, - undef, - undef, - undef, - 'raw', - ], - }, - # # container rootdir # { @@ -120,62 +56,8 @@ my $tests = [ ], }, # - # Snippets - # - { - description => 'Snippets, yaml', - volname => 'snippets/userconfig.yaml', - expected => ['snippets', 'userconfig.yaml', undef, undef, undef, undef, 'raw'], - }, - { - description => 'Snippets, perl', - volname => 'snippets/hookscript.pl', - expected => ['snippets', 'hookscript.pl', undef, undef, undef, undef, 'raw'], - }, - # # Import # - { - description => "Import, ova", - volname => 'import/import.ova', - expected => ['import', 'import.ova', undef, undef, undef, undef, 'ova'], - }, - { - description => "Import, ovf", - volname => 'import/import.ovf', - expected => ['import', 'import.ovf', undef, undef, undef, undef, 'ovf'], - }, - { - description => "Import, qcow2", - volname => 'import/import.qcow2', - expected => ['import', 'import.qcow2', undef, undef, undef, undef, 'qcow2'], - }, - { - description => "Import, vmdk", - volname => 'import/import.vmdk', - expected => ['import', 'import.vmdk', undef, undef, undef, undef, 'vmdk'], - }, - { - description => "Import, raw", - volname => 'import/import.raw', - expected => ['import', 'import.raw', undef, undef, undef, undef, 'raw'], - }, - { - description => "Import, inner file of ova (qcow2)", - volname => 'import/import.ova/disk.qcow2', - expected => - ['import', 'import.ova/disk.qcow2', undef, undef, undef, undef, 'ova+qcow2'], - }, - { - description => "Import, inner file of ova (vmdk)", - volname => 'import/import.ova/disk.vmdk', - expected => ['import', 'import.ova/disk.vmdk', undef, undef, undef, undef, 'ova+vmdk'], - }, - { - description => "Import, inner file of ova (raw)", - volname => 'import/import.ova/disk.raw', - expected => ['import', 'import.ova/disk.raw', undef, undef, undef, undef, 'ova+raw'], - }, { description => "Import, inner file of ova with whitespace in name", volname => 'import/import.ova/OS disk.vmdk', @@ -271,6 +153,48 @@ my $tests = [ } } +# Test cases for ISOs +{ + my $suffixes = ['iso', 'img']; + my $prefix = 'some-installation-disk'; + + for my $suffix ($suffixes->@*) { + my $file_name = "$prefix.$suffix"; + + my @extra_tests = ( + { + description => "ISO image, $suffix", + volname => "iso/$file_name", + expected => ['iso', "$file_name", undef, undef, undef, undef, 'raw'], + }, + ); + + push($tests->@*, @extra_tests); + } +} + +# Test cases for container templates +{ + my $suffixes = ['tar', 'tar.gz', 'tar.xz', 'tar.bz2']; + my $prefix = 'debian-10.0-standard_10.0-1_amd64'; + + for my $suffix ($suffixes->@*) { + my $file_name = "$prefix.$suffix"; + + my @extra_tests = ( + { + description => "Container template, $suffix", + volname => "vztmpl/$file_name", + expected => [ + 'vztmpl', "$file_name", undef, undef, undef, undef, 'raw', + ], + }, + ); + + push($tests->@*, @extra_tests); + } +} + # Additional tests for backup files { my $bkp_suffixes = { @@ -324,6 +248,72 @@ my $tests = [ } } +# Test cases for snippets +{ + my $file_names = ['userconfig.yaml', 'hookscript.pl']; + + for my $file_name ($file_names->@*) { + my @extra_tests = ( + { + description => "Snippets, $file_name", + volname => "snippets/$file_name", + expected => ['snippets', $file_name, undef, undef, undef, undef, 'raw'], + }, + ); + + push($tests->@*, @extra_tests); + } +} + +# Test cases for import files +{ + my $suffixes = ['ova', 'ovf', 'qcow2', 'vmdk', 'raw']; + my $prefix = 'import-file'; + + for my $suffix ($suffixes->@*) { + my $file_name = "$prefix.$suffix"; + + my @extra_tests = ( + { + description => "Import, $suffix", + volname => "import/$file_name", + expected => ['import', "$file_name", undef, undef, undef, undef, $suffix], + }, + ); + + push($tests->@*, @extra_tests); + } +} + +# Test cases for OVA import files with content inside +{ + my $content_suffixes = ['qcow2', 'vmdk', 'raw']; + my $content_prefix = 'disk'; + my $file_name = 'import.ova'; + + for my $content_suffix ($content_suffixes->@*) { + my $content_file_name = "$content_prefix.$content_suffix"; + + my @extra_tests = ( + { + description => "Import, inner file of ova ($content_suffix)", + volname => "import/$file_name/$content_file_name", + expected => [ + 'import', + "$file_name/$content_file_name", + undef, + undef, + undef, + undef, + "ova+$content_suffix", + ], + }, + ); + + push($tests->@*, @extra_tests); + } +} + my sub run_tests($tests) { my $seen_vtype = {}; my $vtype_subdirs = { map { $_ => 1 } keys plugin_get_default_vtype_subdirs()->%* }; -- 2.47.3