From: Christoph Heiss Date: Tue, 7 Nov 2023 12:20:52 +0000 (+0100) Subject: test: add tests for zfs_arc_max calculations X-Git-Url: https://git.proxmox.com/?p=pve-installer.git;a=commitdiff_plain;h=9a0d66cb36d395a1186904132aed1d5dc33a0937 test: add tests for zfs_arc_max calculations Signed-off-by: Christoph Heiss --- diff --git a/Makefile b/Makefile index e792e0e..5e94c29 100644 --- 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= diff --git a/debian/control b/debian/control index 3d13019..d77b12a 100644 --- a/debian/control +++ b/debian/control @@ -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 index 0000000..fb80fc4 --- /dev/null +++ b/test/Makefile @@ -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 index 0000000..74cb9b5 --- /dev/null +++ b/test/zfs-arc-max.pl @@ -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();