]> git.proxmox.com Git - pve-manager.git/blob - test/vzdump_guest_included_test.pl
vzdump: test: adapt and add more tests that are possible now
[pve-manager.git] / test / vzdump_guest_included_test.pl
1 #!/usr/bin/perl
2
3 # Some of the tests can only be applied once the whole include logic is moved
4 # into one single method. Right now parts of it, (all, exclude) are in the
5 # PVE::VZDump->exec_backup() method.
6
7 use strict;
8 use warnings;
9
10 use lib '..';
11
12 use Test::More tests => 9;
13 use Test::MockModule;
14
15 use PVE::VZDump;
16
17 use Data::Dumper;
18
19 my $vmlist = {
20 'ids' => {
21 100 => {
22 'type' => 'qemu',
23 'node' => 'node1',
24 },
25 101 => {
26 'type' => 'qemu',
27 'node' => 'node1',
28 },
29 112 => {
30 'type' => 'lxc',
31 'node' => 'node1',
32 },
33 113 => {
34 'type' => 'lxc',
35 'node' => 'node1',
36 },
37 200 => {
38 'type' => 'qemu',
39 'node' => 'node2',
40 },
41 201 => {
42 'type' => 'qemu',
43 'node' => 'node2',
44 },
45 212 => {
46 'type' => 'lxc',
47 'node' => 'node2',
48 },
49 213 => {
50 'type' => 'lxc',
51 'node' => 'node2',
52 },
53 }
54 };
55
56 my $pools = {
57 testpool => [100, 101, 200, 201],
58 };
59
60 my $pve_cluster_module = Test::MockModule->new('PVE::Cluster');
61 $pve_cluster_module->mock(
62 get_vmlist => sub {
63 return $vmlist;
64 }
65 );
66
67 my $pve_inotify = Test::MockModule->new('PVE::INotify');
68 $pve_inotify->mock(
69 nodename => sub {
70 return 'node1';
71 }
72 );
73
74 my $pve_api2tools = Test::MockModule->new('PVE::API2Tools');
75 $pve_api2tools->mock(
76 get_resource_pool_guest_members => sub {
77 return $pools->{testpool};
78 }
79 );
80
81 my $tests = [];
82 my $addtest = sub {
83 my ($name, $test) = @_;
84 push @$tests, {
85 name => $name,
86 test => $test,
87 };
88 };
89
90 $addtest->('Test all guests', {
91 expected => {
92 node1 => [ 100, 101, 112, 113 ],
93 node2 => [ 200, 201, 212, 213 ],
94 },
95 param => {
96 all => 1,
97 }
98 });
99
100 $addtest->('Test all guests with node limit', {
101 expected => {
102 node2 => [ 200, 201, 212, 213 ],
103 },
104 param => {
105 all => 1,
106 node => 'node2',
107 }
108 });
109
110 $addtest->('Test exclude', {
111 expected => {
112 node1 =>[ 101, 112, 113 ],
113 node2 => [ 201, 212, 213 ],
114 },
115 param => {
116 all => 1,
117 exclude => '100, 102, 200, 202',
118 }
119 });
120
121 $addtest->('Test exclude with node limit', {
122 expected => {
123 node1 =>[ 101, 112, 113 ],
124 },
125 param => {
126 all => 1,
127 exclude => '100, 102, 200, 202',
128 node => 'node1',
129 }
130 });
131
132 $addtest->('Test pool members', {
133 expected => {
134 node1 =>[ 100, 101 ],
135 node2 => [ 200, 201 ],
136 },
137 param => {
138 pool => 'testpool',
139 }
140 });
141
142 $addtest->('Test pool members with node limit', {
143 expected => {
144 node2 => [ 200, 201 ],
145 },
146 param => {
147 pool => 'testpool',
148 node => 'node2',
149 }
150 });
151
152 $addtest->('Test selected VMIDs', {
153 expected => {
154 node1 =>[ 100 ],
155 node2 => [ 201, 212 ],
156 },
157 param => {
158 vmid => '100, 201, 212',
159 }
160 });
161
162 $addtest->('Test selected VMIDs with node limit', {
163 expected => {
164 node1 =>[ 100 ],
165 },
166 param => {
167 vmid => '100, 201, 212',
168 node => 'node1',
169 }
170 });
171
172 $addtest->('Test selected VMIDs on other nodes', {
173 expected => {
174 },
175 param => {
176 vmid => '201, 212',
177 node => 'node1',
178 }
179 });
180
181
182 for my $test (@{$tests}) {
183 my $testname = $test->{name};
184 my $testdata = $test->{test};
185
186 # note($testname);
187
188 my $result = PVE::VZDump::get_included_guests($testdata->{param});
189
190 is_deeply($result, $testdata->{expected}, $testname);
191 }
192
193 exit(0);