From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 823F31FF0AB for ; Wed, 23 Sep 2026 17:13:19 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 8C5CA21949; Wed, 23 Sep 2026 17:10:21 +0200 (CEST) From: "Max R. Carrara" To: pve-devel@lists.proxmox.com Subject: [PATCH pve-storage v2 40/50] test: parse volname: parameterize test case creation for some vtypes Date: Wed, 23 Sep 2026 17:05:54 +0200 Message-ID: <20260923150606.531239-41-m.carrara@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260923150606.531239-1-m.carrara@proxmox.com> References: <20260923150606.531239-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: 1790176050561 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.385 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust 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: IQMUMS5IXWL442RBEEHZ7RJIX6O6G3NQ X-Message-ID-Hash: IQMUMS5IXWL442RBEEHZ7RJIX6O6G3NQ 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