test: add tests for zfs_arc_max calculations

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
This commit is contained in:
Christoph Heiss 2023-11-07 13:20:52 +01:00 committed by Thomas Lamprecht
parent 4c25372e50
commit 9a0d66cb36
4 changed files with 95 additions and 0 deletions

View File

@ -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=

1
debian/control vendored
View 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

10
test/Makefile Normal file
View File

@ -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

81
test/zfs-arc-max.pl Executable file
View File

@ -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();