]>
Commit | Line | Data |
---|---|---|
3097a06b DM |
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); }; | |
ae200950 | 52 | is($@, "storage 'non-existent-store' does not exist\n", $test_name); |
3097a06b DM |
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); |