]> git.proxmox.com Git - pve-ha-manager.git/blob - src/test/test_failover1.pl
308eab3a88f4d32c698abde6a3378ecffc7a1a49
[pve-ha-manager.git] / src / test / test_failover1.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use lib '..';
7 use PVE::HA::Groups;
8 use PVE::HA::Manager;
9 use PVE::HA::Usage::Basic;
10
11 my $groups = PVE::HA::Groups->parse_config("groups.tmp", <<EOD);
12 group: prefer_node1
13 nodes node1
14 EOD
15
16
17 # Relies on the fact that the basic plugin doesn't use the haenv.
18 my $online_node_usage = PVE::HA::Usage::Basic->new();
19 $online_node_usage->add_node("node1");
20 $online_node_usage->add_node("node2");
21 $online_node_usage->add_node("node3");
22
23 my $service_conf = {
24 node => 'node1',
25 group => 'prefer_node1',
26 };
27
28 my $current_node = $service_conf->{node};
29
30 sub test {
31 my ($expected_node, $try_next) = @_;
32
33 my $node = PVE::HA::Manager::select_service_node
34 ($groups, $online_node_usage, "vm:111", $service_conf, $current_node, $try_next);
35
36 my (undef, undef, $line) = caller();
37 die "unexpected result: $node != ${expected_node} at line $line\n"
38 if $node ne $expected_node;
39
40 $current_node = $node;
41 }
42
43
44 test('node1');
45 test('node1', 1);
46
47 $online_node_usage->remove_node("node1"); # poweroff
48
49 test('node2');
50 test('node3', 1);
51 test('node2', 1);
52
53 $online_node_usage->remove_node("node2"); # poweroff
54
55 test('node3');
56 test('node3', 1);
57
58 $online_node_usage->add_node("node1"); # poweron
59
60 test('node1');
61
62 $online_node_usage->add_node("node2"); # poweron
63
64 test('node1');
65 test('node1', 1);