From: Christoph Heiss <c.heiss@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH installer v3 6/8] fix #4829: test: add tests for new zfs_arc_max calculations
Date: Tue, 31 Oct 2023 13:10:58 +0100 [thread overview]
Message-ID: <20231031121108.1130299-7-c.heiss@proxmox.com> (raw)
In-Reply-To: <20231031121108.1130299-1-c.heiss@proxmox.com>
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Changes v1 -> v2:
* no changes
Changes v2 -> v3:
* no changes
Makefile | 3 ++
debian/control | 1 +
test/Makefile | 10 ++++++
test/zfs-arc-max.pl | 81 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 95 insertions(+)
create mode 100644 test/Makefile
create mode 100755 test/zfs-arc-max.pl
diff --git a/Makefile b/Makefile
index 111fe4b..13a2b81 100644
--- a/Makefile
+++ b/Makefile
@@ -44,6 +44,7 @@ $(BUILDDIR):
proxmox-low-level-installer \
proxmox-tui-installer/ \
spice-vdagent.sh \
+ test/ \
unconfigured.sh \
xinitrc \
$@.tmp
@@ -75,7 +76,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();
--
2.42.0
next prev parent reply other threads:[~2023-10-31 12:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-31 12:10 [pve-devel] [PATCH installer v3 0/8] fix #4829: set up lower default limit for ZFS ARC in installer Christoph Heiss
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 1/8] run env: add comment for query_total_memory() Christoph Heiss
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 2/8] tui: views: add optional suffix label for `NumericEditView`s Christoph Heiss
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 3/8] tui: bootdisk: simplify product handling by passing the config directly Christoph Heiss
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 4/8] fix #4829: install: add new ZFS `arc_max` setup option Christoph Heiss
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 5/8] fix #4829: proxinstall: expose new `arc_max` ZFS option for PVE installations Christoph Heiss
2023-10-31 12:10 ` Christoph Heiss [this message]
2023-10-31 12:10 ` [pve-devel] [PATCH installer v3 7/8] fix #4829: tui: setup: add new ZFS `arc_max` option Christoph Heiss
2023-10-31 12:11 ` [pve-devel] [PATCH installer v3 8/8] fix #4829: tui: bootdisk: expose new `arc_max` ZFS option for PVE installations Christoph Heiss
2023-11-06 14:54 ` [pve-devel] partially-applied: [PATCH installer v3 0/8] fix #4829: set up lower default limit for ZFS ARC in installer Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231031121108.1130299-7-c.heiss@proxmox.com \
--to=c.heiss@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox