From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 8B25D1FF16B for <inbox@lore.proxmox.com>; Thu, 20 Feb 2025 11:22:31 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 47495E38B; Thu, 20 Feb 2025 11:22:24 +0100 (CET) Message-ID: <3da5f7f5-0da4-4679-9950-c95294526be9@proxmox.com> Date: Thu, 20 Feb 2025 11:21:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>, Daniel Kral <d.kral@proxmox.com> References: <20250211160825.254167-1-d.kral@proxmox.com> <20250211160825.254167-23-d.kral@proxmox.com> Content-Language: en-US From: Fiona Ebner <f.ebner@proxmox.com> In-Reply-To: <20250211160825.254167-23-d.kral@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.046 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 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pve-devel] [PATCH container v2 02/11] tests: add tests for expected behavior of alloc_disk wrapper X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Am 11.02.25 um 17:08 schrieb Daniel Kral: > Adds test cases for the alloc_disk wrapper subroutine to ensure that: > > - zero-sized volumes are allocated as subvols on path-based storages > - non-zero-sized volumes are allocated as raw on path-based storages > - volumes are allocated as raw on btrfs storages without quotas > - volumes are allocated as subvols on btrfs storages with quotas > - volumes are allocated as subvols on zfs storages > - volumes cannot be allocated on storages that do not support rootdir > > These test cases should allow to catch regressions in following changes > to the alloc_disk wrapper. Always nice to have such tests up-front :) > diff --git a/src/test/run_alloc_disk_tests.pl b/src/test/run_alloc_disk_tests.pl > new file mode 100755 > index 0000000..b13f5a2 > --- /dev/null > +++ b/src/test/run_alloc_disk_tests.pl > @@ -0,0 +1,149 @@ > +#!/usr/bin/env perl > + > +use strict; > +use warnings; > + > +use lib qw(..); > + > +use PVE::Tools; > + > +use Test::More; > +use Test::MockModule; > + > +use PVE::LXC; > + > +my $test_vmid = 100; > +my $test_root_uid = 100000; > +my $test_root_gid = 100000; > + > +my $storage_config = { > + ids => { > + local => { > + content => { > + rootdir => 1, > + }, > + path => "/var/lib/vz", > + type => "dir", > + shared => 0, > + }, > + norootdirs => { Similar to the qemu-server patch: I'd add some other content to the hash, just so it's slightly more realistic. > + path => '/var/lib/vz', > + type => 'dir',> + }, > + btrfsstore => { > + content => { > + rootdir => 1, > + }, > + path => '/butter/bread', > + type => 'btrfs', > + }, > + btrfsquotas => { > + content => { > + rootdir => 1, > + }, > + path => '/butter/bread', > + type => 'btrfs', > + quotas => 1, > + }, > + zfspool0 => { > + type => 'zfspool', > + content => { > + rootdir => 1, > + }, > + pool => 'rpool0', > + mountpoint => '/zfspool0', > + }, > + }, > +}; > + > +my $storage_module = Test::MockModule->new("PVE::Storage"); > +$storage_module->redefine( > + vdisk_alloc => sub { > + my ($storecfg, $storage, $vmid, $fmt, $name, $size_kb) = @_; > + > + $fmt //= ''; > + my $prefix = ($fmt eq 'subvol') ? 'subvol' : 'vm'; > + > + return "$storage:$prefix-$vmid-disk-0"; Nit: To have the tests be slightly more complete, you could have additional global variables for size and format, similar to how you keep track of $format_disk_called. But not too important. > + }, > +); > + > +my $format_disk_called = 0; > + > +my $lxc_module = Test::MockModule->new("PVE::LXC"); > +$lxc_module->redefine( > + format_disk => sub { > + $format_disk_called = 1; > + }, > +); > + > +my $tests = [ > + { > + description => 'allocate zero-sized volume on path-based storage', > + storage => 'local', > + size_kb => 0, > + result => ["local:subvol-$test_vmid-disk-0", 1], > + }, > + { > + description => 'allocate non-zero-sized volume on path-based storage', > + should_format_disk => 1, > + storage => 'local', > + size_kb => 1024 * 1024, > + result => ["local:vm-$test_vmid-disk-0", 0], > + }, > + { > + description => 'allocate volume on btrfs with quotas disabled', > + should_format_disk => 1, > + storage => 'btrfsstore', > + size_kb => 1024 * 1024, > + result => ["btrfsstore:vm-$test_vmid-disk-0", 0], > + }, > + { > + description => 'allocate volume on btrfs with quotas enabled', > + storage => 'btrfsquotas', > + size_kb => 1024 * 1024, > + result => ["btrfsquotas:subvol-$test_vmid-disk-0", 1], > + }, > + { > + description => 'allocate volume on zfspool', > + storage => 'zfspool0', > + size_kb => 1024 * 1024, > + result => ["zfspool0:subvol-$test_vmid-disk-0", 1], > + }, > + { > + description => 'allocate volume on storage without rootdir content type support', > + should_fail => 1, > + storage => 'norootdirs', > + size_kb => 1024 * 1024, > + }, > +]; > + > +# multiply by 2 because of format_disk test > +plan(tests => 2 * scalar($tests->@*)); > + > +for my $case ($tests->@*) { > + my $should_format_disk = exists($case->{should_format_disk}) ? $case->{should_format_disk} : 0; > + $format_disk_called = 0; > + > + my @result = eval { I'd prefer to be explicit: my ($volid, $needs_chown) = eval { > + PVE::LXC::alloc_disk( > + $storage_config, > + $test_vmid, > + $case->{storage}, > + $case->{size_kb}, > + $test_root_uid, > + $test_root_gid > + ) > + }; > + Style nit: I'd avoid the blank line here to make it less likely for future code to sneak in > + if ($@) { Style nit: if (my $err = $@) { and then use $err. Because what if somebody changes the $should_fail assignment to a function call in the future or adds another line in between, then you might suddenly have a different $@ in the check below. > + my $should_fail = exists($case->{should_fail}) ? $case->{should_fail} : 0; > + is(defined($@), $should_fail, "should fail: $case->{description}") || diag explain $@; I'd just write 1 instead of defined($@), because we are already in the failure branch. Note that defined($@) would otherwise return 'undef', so comparing against 0 wouldn't work either. And note this requires $should_fail to be exactly 1 and not some other true value. So I'd prefer using something like: if ($should_fail) { pass(...) } else { diag ... fail(...) } > + } else { > + is_deeply(\@result, $case->{result}, $case->{description}); > + } > + > + is($format_disk_called, $should_format_disk, "should format_disk: $case->{description}"); > +} > + > +done_testing(); _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel