]> git.proxmox.com Git - qemu-server.git/blame - test/test_get_replicatable_volumes.pl
d/control: remove unused dependency
[qemu-server.git] / test / test_get_replicatable_volumes.pl
CommitLineData
3097a06b
DM
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use lib ('..');
7
8use Data::Dumper;
9
10use PVE::Storage;
11use PVE::QemuConfig;
12
13use Test::More;
14
15my $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
41my $vmid = 900;
42
43my $rawconf = "scsi0: non-existent-store:vm-103-disk-1,size=8G\n";
44my $conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
45
46my $volumes;
47my $expect;
48
49my $test_name = "test non existent storage";
50
51eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
52is($@, "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);
61is_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
69eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
70is($@, "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
78eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
79is($@, "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);
88is_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);
97is_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);
106is_deeply($volumes, {}, $test_name);
107
108
109$test_name = "test hidden volid in snapshot";
110
111$rawconf = <<__EOD__;
112memory: 1024
113scsi0: local-zfs:vm-$vmid-disk-2,size=8G
114[snap1]
115memory: 512
116scsi0: 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};
125is_deeply($volumes, $expect, $test_name);
126
127
128$test_name = "test volid with different replicate setting in snapshot";
129$rawconf = <<__EOD__;
130memory: 1024
131scsi0: local-zfs:vm-$vmid-disk-1,size=8G,replicate=0
132[snap1]
133memory: 512
134scsi0: 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};
142is_deeply($volumes, $expect, $test_name);
143
144
145$test_name = "test vm with replicatable unused volumes";
146
147$rawconf = <<__EOD__;
148scsi0: local-zfs:vm-$vmid-disk-1,size=8G
149unused1: local-zfs:vm-$vmid-disk-2
150unused5: 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};
160is_deeply($volumes, $expect, $test_name);
161
162
163$test_name = "test vm with non-replicatable unused volumes";
164$rawconf = <<__EOD__;
165scsi0: local-zfs:vm-$vmid-disk-1,size=8G
166unused1: local:$vmid/vm-$vmid-disk-2.raw
167__EOD__
168
169$conf = PVE::QemuServer::parse_vm_config("/qemu-server/$vmid.conf", $rawconf);
170eval { $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $vmid, $conf, 0, 0); };
171is($@, "missing replicate feature on volume 'local:900/vm-900-disk-2.raw'\n", $test_name);
172
173
174done_testing();
175exit(0);