]> git.proxmox.com Git - pve-installer.git/commitdiff
test: add tests for zfs_arc_max calculations
authorChristoph Heiss <c.heiss@proxmox.com>
Tue, 7 Nov 2023 12:20:52 +0000 (13:20 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 7 Nov 2023 15:40:15 +0000 (16:40 +0100)
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
Makefile
debian/control
test/Makefile [new file with mode: 0644]
test/zfs-arc-max.pl [new file with mode: 0755]

index e792e0e142666dc69d1794947ee467ce533ce387..5e94c2998ca32682bfbf57b0aac6e9cd2a10a335 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -45,6 +45,7 @@ $(BUILDDIR):
          proxmox-tui-installer/ \
          proxmox-installer-common/ \
          spice-vdagent.sh \
+         test/ \
          unconfigured.sh \
          xinitrc \
          $@.tmp
@@ -76,7 +77,9 @@ $(DSC): $(BUILDDIR)
 sbuild: $(DSC)
        sbuild $(DSC)
 
+.PHONY: test
 test:
+       $(MAKE) -C test check
        $(CARGO) test --workspace $(CARGO_BUILD_ARGS)
 
 DESTDIR=
index 3d130193735b7bce9142035158ba516c5dc6009e..d77b12af12f2b1168c4e9a7168f8629cba6c6343 100644 (file)
@@ -11,6 +11,7 @@ Build-Depends: cargo:native,
                librust-regex-1+default-dev (>= 1.7~~),
                librust-serde-1+default-dev,
                librust-serde-json-1+default-dev,
+               libtest-mockmodule-perl,
                perl,
                rustc:native,
 Standards-Version: 4.5.1
diff --git a/test/Makefile b/test/Makefile
new file mode 100644 (file)
index 0000000..fb80fc4
--- /dev/null
@@ -0,0 +1,10 @@
+all:
+
+export PERLLIB=..
+
+.PHONY: check
+check: test-zfs-arc-max
+
+.PHONY: test-zfs-arc-max
+test-zfs-arc-max:
+       ./zfs-arc-max.pl
diff --git a/test/zfs-arc-max.pl b/test/zfs-arc-max.pl
new file mode 100755 (executable)
index 0000000..74cb9b5
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::MockModule qw(strict);
+
+my $proxmox_install_runenv = Test::MockModule->new('Proxmox::Install::RunEnv');
+my $proxmox_install_isoenv = Test::MockModule->new('Proxmox::Install::ISOEnv');
+
+sub mock_product {
+    my ($product) = @_;
+
+    $proxmox_install_isoenv->redefine(
+       get => sub {
+           my ($k) = @_;
+           return $product if $k eq 'product';
+           die "iso environment key $k not mocked!\n";
+       },
+    );
+}
+
+my %default_tests = (
+    16 => 64, # at least 64 MiB
+    1024 => 102,
+    4 * 1024 => 410,
+    8 * 1024 => 819,
+    150 * 1024 => 15360,
+    160 * 1024 => 16384,
+    1024 * 1024 => 16384, # maximum of 16 GiB
+);
+
+while (my ($total_mem, $expected) = each %default_tests) {
+    $proxmox_install_runenv->redefine(
+       get => sub {
+           my ($k) = @_;
+           return $total_mem if $k eq 'total_memory';
+           die "runtime environment key $k not mocked!\n";
+       },
+    );
+
+    mock_product('pve');
+    is(Proxmox::Install::RunEnv::default_zfs_arc_max(), $expected,
+       "$expected MiB should be zfs_arc_max for PVE with $total_mem MiB system memory");
+
+    mock_product('pbs');
+    is(Proxmox::Install::RunEnv::default_zfs_arc_max(), 0,
+       "zfs_arc_max should default to `0` for PBS with $total_mem MiB system memory");
+
+    mock_product('pmg');
+    is(Proxmox::Install::RunEnv::default_zfs_arc_max(), 0,
+       "zfs_arc_max should default to `0` for PMG with $total_mem MiB system memory");
+}
+
+my @clamp_tests = (
+    # input, total system memory, expected
+    [ 0, 4 * 1024, 0 ],
+    [ 16, 4 * 1024, 64 ],
+    [ 4 * 1024, 4 * 1024, 4 * 1024 ],
+    [ 4 * 1024, 6 * 1024, 4 * 1024 ],
+    [ 8 * 1024, 4 * 1024, 4 * 1024 ],
+);
+
+mock_product('pve');
+foreach (@clamp_tests) {
+    my ($input, $total_mem, $expected) = @$_;
+
+    $proxmox_install_runenv->redefine(
+       get => sub {
+           my ($k) = @_;
+           return $total_mem if $k eq 'total_memory';
+           die "runtime environment key $k not mocked!\n";
+       },
+    );
+
+    is(Proxmox::Install::RunEnv::clamp_zfs_arc_max($input), $expected,
+       "$input MiB zfs_arc_max should be clamped to $expected MiB with $total_mem MiB system memory");
+}
+
+done_testing();