From: Fiona Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH proxmox-perl-rs 2/2] add basic test for resource scheduling
Date: Thu, 10 Nov 2022 15:37:44 +0100 [thread overview]
Message-ID: <20221110143800.98047-6-f.ebner@proxmox.com> (raw)
In-Reply-To: <20221110143800.98047-1-f.ebner@proxmox.com>
currently only used to test the installed version and not
automatically during build. See the FIXME note for why.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
pve-rs/test/Makefile | 4 ++
pve-rs/test/README | 2 +
pve-rs/test/resource_scheduling.pl | 70 ++++++++++++++++++++++++++++++
3 files changed, 76 insertions(+)
create mode 100644 pve-rs/test/Makefile
create mode 100644 pve-rs/test/README
create mode 100755 pve-rs/test/resource_scheduling.pl
diff --git a/pve-rs/test/Makefile b/pve-rs/test/Makefile
new file mode 100644
index 0000000..dc0a5bd
--- /dev/null
+++ b/pve-rs/test/Makefile
@@ -0,0 +1,4 @@
+.PHONY: test
+test:
+ @echo "-- running pve-rs tests --"
+ ./resource_scheduling.pl
diff --git a/pve-rs/test/README b/pve-rs/test/README
new file mode 100644
index 0000000..662b131
--- /dev/null
+++ b/pve-rs/test/README
@@ -0,0 +1,2 @@
+Note that these tests are not run during build currently! See the FIXME note in
+resource_scheduling.pl for why.
diff --git a/pve-rs/test/resource_scheduling.pl b/pve-rs/test/resource_scheduling.pl
new file mode 100755
index 0000000..b55843c
--- /dev/null
+++ b/pve-rs/test/resource_scheduling.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+# FIXME ensure that the just built library is loaded rather than the installed one and add a test
+# target to pve-rs/Makefile afterwards. Issue is that the loader looks into an $PATH/auto directory,
+# so it's not enough to use lib qw(../target/release)
+# Also might be a good idea to test for existence of the files to avoid surprises if the directory
+# structure changes in the future.
+#use lib qw(..);
+#use lib qw(../target/release);
+use PVE::RS::ResourceScheduling::Static;
+
+sub assert_num_eq {
+ my ($left, $right) = @_;
+ my (undef, undef, $line) = caller();
+ die "assertion failed: '$left != $right' at line $line\n" if $left != $right;
+}
+
+sub assert_str_eq {
+ my ($left, $right) = @_;
+ my (undef, undef, $line) = caller();
+ die "assertion failed: '$left ne $right' at line $line\n" if $left ne $right;
+}
+
+sub assert {
+ my ($bool) = @_;
+ my (undef, undef, $line) = caller();
+ die "assertion failed at line $line\n" if !$bool;
+}
+
+my $static = PVE::RS::ResourceScheduling::Static->new();
+assert_num_eq(scalar($static->list_nodes()->@*), 0);
+$static->add_node("A", 10, 100_000_000_000);
+assert_num_eq(scalar($static->list_nodes()->@*), 1);
+$static->add_node("B", 20, 200_000_000_000);
+assert_num_eq(scalar($static->list_nodes()->@*), 2);
+$static->add_node("C", 30, 300_000_000_000);
+assert_num_eq(scalar($static->list_nodes()->@*), 3);
+$static->remove_node("C");
+assert_num_eq(scalar($static->list_nodes()->@*), 2);
+assert($static->contains_node("A"));
+assert($static->contains_node("B"));
+assert(!$static->contains_node("C"));
+
+my $service = {
+ maxcpu => 4,
+ maxmem => 20_000_000_000,
+};
+
+for (my $i = 0; $i < 15; $i++) {
+ my $score_list = $static->score_nodes_to_start_service($service);
+
+ # imitate HA manager
+ my $scores = { map { $_->[0] => -$_->[1] } $score_list->@* };
+ my @nodes = sort {
+ $scores->{$a} <=> $scores->{$b} || $a cmp $b
+ } keys $scores->%*;
+
+ if ($i % 3 == 2) {
+ assert_str_eq($nodes[0], "A");
+ assert_str_eq($nodes[1], "B");
+ } else {
+ assert_str_eq($nodes[0], "B");
+ assert_str_eq($nodes[1], "A");
+ }
+
+ $static->add_service_usage_to_node($nodes[0], $service);
+}
--
2.30.2
next prev parent reply other threads:[~2022-11-10 14:38 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-10 14:37 [pve-devel] [PATCH-SERIES proxmox-resource-scheduling/pve-ha-manager/etc] add static usage scheduler for HA manager Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH proxmox-resource-scheduling 1/3] initial commit Fiona Ebner
2022-11-15 10:15 ` [pve-devel] applied: " Wolfgang Bumiller
2022-11-15 15:39 ` [pve-devel] " DERUMIER, Alexandre
2022-11-16 9:09 ` Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH proxmox-resource-scheduling 2/3] add pve_static module Fiona Ebner
2022-11-16 9:18 ` Thomas Lamprecht
2022-11-10 14:37 ` [pve-devel] [PATCH proxmox-resource-scheduling 3/3] add Debian packaging Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH proxmox-perl-rs 1/2] pve-rs: add resource scheduling module Fiona Ebner
2022-11-15 10:16 ` [pve-devel] applied-series: " Wolfgang Bumiller
2022-11-10 14:37 ` Fiona Ebner [this message]
2022-11-10 14:37 ` [pve-devel] [PATCH manager 1/3] pvestatd: broadcast static node information Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH v3 manager 2/3] cluster resources: add cgroup-mode to node properties Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH v2 manager 3/3] ui: lxc/qemu: cpu edit: make cpuunits depend on node's cgroup version Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH cluster 1/1] datacenter config: add cluster resource scheduling (crs) options Fiona Ebner
2022-11-17 11:52 ` [pve-devel] applied: " Thomas Lamprecht
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 01/11] env: add get_static_node_stats() method Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 02/11] resources: add get_static_stats() method Fiona Ebner
2022-11-15 13:28 ` Thomas Lamprecht
2022-11-16 8:46 ` Fiona Ebner
2022-11-16 8:59 ` Thomas Lamprecht
2022-11-16 12:38 ` DERUMIER, Alexandre
2022-11-16 12:52 ` Thomas Lamprecht
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 03/11] add Usage base plugin and Usage::Basic plugin Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 04/11] manager: select service node: add $sid to parameters Fiona Ebner
2022-11-16 7:17 ` Thomas Lamprecht
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 05/11] manager: online node usage: switch to Usage::Basic plugin Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 06/11] usage: add Usage::Static plugin Fiona Ebner
2022-11-15 15:55 ` DERUMIER, Alexandre
2022-11-16 9:10 ` Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 07/11] env: add get_crs_settings() method Fiona Ebner
2022-11-16 7:05 ` Thomas Lamprecht
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 08/11] manager: set resource scheduler mode upon init Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 09/11] manager: use static resource scheduler when configured Fiona Ebner
2022-11-11 9:28 ` Fiona Ebner
2022-11-16 7:14 ` Thomas Lamprecht
2022-11-16 9:37 ` Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 10/11] manager: avoid scoring nodes if maintenance fallback node is valid Fiona Ebner
2022-11-10 14:37 ` [pve-devel] [PATCH ha-manager 11/11] manager: avoid scoring nodes when not trying next and current " Fiona Ebner
2022-11-10 14:38 ` [pve-devel] [PATCH docs 1/1] ha: add section about scheduler modes Fiona Ebner
2022-11-15 13:12 ` [pve-devel] partially-applied: [PATCH-SERIES proxmox-resource-scheduling/pve-ha-manager/etc] add static usage scheduler for HA manager 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=20221110143800.98047-6-f.ebner@proxmox.com \
--to=f.ebner@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