]> git.proxmox.com Git - pve-manager.git/commitdiff
vzdump: test: add first tests to the guest include logic
authorAaron Lauterer <a.lauterer@proxmox.com>
Mon, 8 Jun 2020 13:00:35 +0000 (15:00 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 8 Jun 2020 13:54:42 +0000 (15:54 +0200)
Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
test/Makefile
test/vzdump_guest_included_test.pl [new file with mode: 0755]

index c26e16b18f1b85a608807d17439288921023eb38..44f3b0d72c4547eed2b4ec5017aeacb38bee8b63 100644 (file)
@@ -5,7 +5,7 @@ all:
 export PERLLIB=..
 
 .PHONY: check
-check: replication_test balloon_test mail_test
+check: replication_test balloon_test mail_test vzdump_test
 
 balloon_test:
        ./balloontest.pl
@@ -21,6 +21,9 @@ replication_test:
 mail_test:
        ./mail_test.pl
 
+vzdump_test:
+       ./vzdump_guest_included_test.pl
+
 .PHONY: install
 install:
 
diff --git a/test/vzdump_guest_included_test.pl b/test/vzdump_guest_included_test.pl
new file mode 100755 (executable)
index 0000000..3374851
--- /dev/null
@@ -0,0 +1,200 @@
+#!/usr/bin/perl
+
+# Some of the tests can only be applied once the whole include logic is moved
+# into one single method. Right now parts of it, (all, exclude)  are in the
+# PVE::VZDump->exec_backup() method.
+
+use strict;
+use warnings;
+
+use lib '..';
+
+use Test::More tests => 7;
+use Test::MockModule;
+
+use PVE::VZDump;
+
+use Data::Dumper;
+
+my $vmlist = {
+    'ids' => {
+       100 => {
+           'type' => 'qemu',
+           'node' => 'node1',
+       },
+       101 => {
+           'type' => 'qemu',
+           'node' => 'node1',
+       },
+       112 => {
+           'type' => 'lxc',
+           'node' => 'node1',
+       },
+       113 => {
+           'type' => 'lxc',
+           'node' => 'node1',
+       },
+       200 => {
+           'type' => 'qemu',
+           'node' => 'node2',
+       },
+       201 => {
+           'type' => 'qemu',
+           'node' => 'node2',
+       },
+       212 => {
+           'type' => 'lxc',
+           'node' => 'node2',
+       },
+       213 => {
+           'type' => 'lxc',
+           'node' => 'node2',
+       },
+    }
+};
+
+my $pools = {
+    testpool => [100, 101, 200, 201],
+};
+
+my $pve_cluster_module = Test::MockModule->new('PVE::Cluster');
+$pve_cluster_module->mock(
+    get_vmlist => sub {
+       return $vmlist;
+    }
+);
+
+my $pve_inotify = Test::MockModule->new('PVE::INotify');
+$pve_inotify->mock(
+    nodename => sub {
+       return 'node1';
+    }
+);
+
+my $pve_api2tools = Test::MockModule->new('PVE::API2Tools');
+$pve_api2tools->mock(
+    get_resource_pool_guest_members => sub {
+       return $pools->{testpool};
+    }
+);
+
+my $tests = [];
+my $addtest = sub {
+    my ($name, $test) = @_;
+    push @$tests, {
+        name => $name,
+        test => $test,
+    };
+};
+
+# is handled in the PVE::VZDump->exec_backup() method for now
+# $addtest->('Test all guests', {
+#     expected_vmids => [ 100, 101, 112, 113, 200, 201, 212, 213 ],
+#     expected_skiplist => [ ],
+#     param => {
+#      all => 1,
+#     }
+# });
+
+# is handled in the PVE::VZDump->exec_backup() method for now
+# $addtest->('Test all guests with cluster node limit', {
+#     expected_vmids => [ 100, 101, 112, 113, 200, 201, 212, 213 ],
+#     expected_skiplist => [],
+#     param => {
+#      all => 1,
+#      node => 'node2',
+#     }
+# });
+
+# is handled in the PVE::VZDump->exec_backup() method for now
+# $addtest->('Test all guests with local node limit', {
+#     expected_vmids => [ 100, 101, 112, 113 ],
+#     expected_skiplist => [ 200, 201, 212, 213 ],
+#     param => {
+#      all => 1,
+#      node => 'node1',
+#     }
+# });
+#
+# TODO: all test variants with exclude
+
+$addtest->('Test pool members', {
+    expected_vmids => [ 100, 101 ],
+    expected_skiplist => [ 200, 201 ],
+    param => {
+       pool => 'testpool',
+    }
+});
+
+$addtest->('Test pool members with cluster node limit', {
+    expected_vmids => [ 100, 101, 200, 201 ],
+    expected_skiplist => [],
+    param => {
+       pool => 'testpool',
+       node => 'node2',
+    }
+});
+
+$addtest->('Test pool members with local node limit', {
+    expected_vmids => [ 100, 101 ],
+    expected_skiplist => [ 200, 201 ],
+    param => {
+       pool => 'testpool',
+       node => 'node1',
+    }
+});
+
+$addtest->('Test selected VMIDs', {
+    expected_vmids => [ 100 ],
+    expected_skiplist => [ 201, 212 ],
+    param => {
+       vmid => '100, 201, 212',
+    }
+});
+
+
+$addtest->('Test selected VMIDs with cluster node limit', {
+    expected_vmids => [ 100, 201, 212 ],
+    expected_skiplist => [],
+    param => {
+       vmid => '100, 201, 212',
+       node => 'node2',
+    }
+});
+
+$addtest->('Test selected VMIDs with local node limit', {
+    expected_vmids => [ 100 ],
+    expected_skiplist => [ 201, 212 ],
+    param => {
+       vmid => '100, 201, 212',
+       node => 'node1',
+    }
+});
+
+$addtest->('Test selected VMIDs on other nodes', {
+    expected_vmids => [],
+    expected_skiplist => [ 201, 212 ],
+    param => {
+       vmid => '201, 212',
+       node => 'node1',
+    }
+});
+
+
+for my $test (@{$tests}) {
+    my $testname = $test->{name};
+    my $testdata = $test->{test};
+
+    note($testname);
+    my $expected = [ $testdata->{expected_vmids}, $testdata->{expected_skiplist} ];
+
+    my ($local, $cluster)  = PVE::VZDump::get_included_guests($testdata->{param});
+    my $result = [ $local, $cluster ];
+
+    # print "Expected: " . Dumper($expected);
+    # print "Returned: " . Dumper($result);
+
+    is_deeply($result, $expected, $testname);
+}
+
+exit(0);