Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com> --- v2 -> v3: * define pool in separate hash instead of in the return value * changed the adding and processing of tests as suggested by Thomas [0]
v1 -> v2: adapt handling of return values, closer to what is used in production code. [0] https://pve.proxmox.com/pipermail/pve-devel/2020-June/043854.html test/Makefile | 5 +- test/vzdump_guest_included_test.pl | 200 +++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 1 deletion(-) create mode 100755 test/vzdump_guest_included_test.pl diff --git a/test/Makefile b/test/Makefile index c26e16b1..44f3b0d7 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 index 00000000..33748513 --- /dev/null +++ b/test/vzdump_guest_included_test.pl @@ -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); -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel