]> git.proxmox.com Git - qemu-server.git/blob - test/test_get_replicatable_volumes.pl
d/control: remove unused dependency
[qemu-server.git] / test / test_get_replicatable_volumes.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use lib ('..');
7
8 use Data::Dumper;
9
10 use PVE::Storage;
11 use PVE::QemuConfig;
12
13 use Test::More;
14
15 my $storecfg = {
16 ids => {
17 local => {
18 type => 'dir',
19 shared => 0,
20 content => {
21 'iso' => 1,
22 'backup' => 1,
23 'images' => 1,
24 'rootdir' => 1
25 },
26 path => "/var/lib/vz",
27 },
28 'local-zfs' => {
29 type => 'zfspool',
30 pool => 'nonexistent-testpool',
31 shared => 0,
32 content => {
33 'images' => 1,
34 'rootdir' => 1
35 },
36 },
37 },
38 };
39
40
41 my $vmid = 900;
42
43 my $rawconf = "scsi0: non-existent-store:vm-103-disk-1,size=8G\n";
44 my $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
45
46 my $volumes;
47 my $expect;
48
49 my $test_name = "test non existent storage";
50
51 eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
52 is($@, "storage 'non-existent-store' does not exists\n", $test_name);
53
54
55 $test_name = "test with disk from other VM (not owner)";
56
57 $rawconf = "scsi0: local:103/vm-103-disk-1.qcow2,size=8G\n";
58 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
59
60 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
61 is_deeply($volumes, {}, $test_name);
62
63
64 $test_name = "test missing replicate feature";
65
66 $rawconf = "scsi0: local:$vmid/vm-$vmid-disk-1.qcow2,size=8G\n";
67 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
68
69 eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
70 is($@, "missing replicate feature on volume 'local:900/vm-900-disk-1.qcow2'\n", $test_name);
71
72
73 $test_name = "test raw path disk with replicate enabled";
74
75 $rawconf = "scsi0: /dev/disk/abcdefg,size=8G\n";
76 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
77
78 eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
79 is($@, "unable to replicate local file/device '/dev/disk/abcdefg'\n", $test_name);
80
81
82 $test_name = "test raw path disk with replicate disabled";
83
84 $rawconf = "scsi0: /dev/disk/abcdefg,size=8G,replicate=0\n";
85 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
86
87 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
88 is_deeply($volumes, {}, $test_name);
89
90
91 $test_name = "test CDROM with iso file";
92
93 $rawconf = "ide2: local:iso/pve-cd.iso,media=cdrom\n";
94 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
95
96 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
97 is_deeply($volumes, {}, $test_name);
98
99
100 $test_name = "test CDROM with access to physical 'cdrom' device";
101
102 $rawconf = "ide2: cdrom,media=cdrom\n";
103 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
104
105 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
106 is_deeply($volumes, {}, $test_name);
107
108
109 $test_name = "test hidden volid in snapshot";
110
111 $rawconf = <<__EOD__;
112 memory: 1024
113 scsi0: local-zfs:vm-$vmid-disk-2,size=8G
114 [snap1]
115 memory: 512
116 scsi0: local-zfs:vm-$vmid-disk-1,size=8G
117 __EOD__
118
119 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
120 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
121 $expect = {
122 "local-zfs:vm-$vmid-disk-1" => 1,
123 "local-zfs:vm-$vmid-disk-2" => 1,
124 };
125 is_deeply($volumes, $expect, $test_name);
126
127
128 $test_name = "test volid with different replicate setting in snapshot";
129 $rawconf = <<__EOD__;
130 memory: 1024
131 scsi0: local-zfs:vm-$vmid-disk-1,size=8G,replicate=0
132 [snap1]
133 memory: 512
134 scsi0: local-zfs:vm-$vmid-disk-1,size=8G
135 __EOD__
136
137 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
138 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
139 $expect = {
140 "local-zfs:vm-$vmid-disk-1" => 1,
141 };
142 is_deeply($volumes, $expect, $test_name);
143
144
145 $test_name = "test vm with replicatable unused volumes";
146
147 $rawconf = <<__EOD__;
148 scsi0: local-zfs:vm-$vmid-disk-1,size=8G
149 unused1: local-zfs:vm-$vmid-disk-2
150 unused5: local-zfs:vm-$vmid-disk-3
151 __EOD__
152
153 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
154 $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0);
155 $expect = {
156 "local-zfs:vm-$vmid-disk-1" => 1,
157 "local-zfs:vm-$vmid-disk-2" => 1,
158 "local-zfs:vm-$vmid-disk-3" => 1,
159 };
160 is_deeply($volumes, $expect, $test_name);
161
162
163 $test_name = "test vm with non-replicatable unused volumes";
164 $rawconf = <<__EOD__;
165 scsi0: local-zfs:vm-$vmid-disk-1,size=8G
166 unused1: local:$vmid/vm-$vmid-disk-2.raw
167 __EOD__
168
169 $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
170 eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
171 is($@, "missing replicate feature on volume 'local:900/vm-900-disk-2.raw'\n", $test_name);
172
173
174 done_testing();
175 exit(0);