]> git.proxmox.com Git - pve-storage.git/blob - src/test/path_to_volume_id_test.pm
separate packaging and source build system
[pve-storage.git] / src / test / path_to_volume_id_test.pm
1 package PVE::Storage::TestPathToVolumeId;
2
3 use strict;
4 use warnings;
5
6 use lib qw(..);
7
8 use PVE::Storage;
9
10 use Test::More;
11
12 use Cwd;
13 use File::Basename;
14 use File::Path qw(make_path remove_tree);
15 use File::Temp;
16
17 my $storage_dir = File::Temp->newdir();
18 my $scfg = {
19 'digest' => 'd29306346b8b25b90a4a96165f1e8f52d1af1eda',
20 'ids' => {
21 'local' => {
22 'shared' => 0,
23 'path' => "$storage_dir",
24 'type' => 'dir',
25 'maxfiles' => 0,
26 'content' => {
27 'snippets' => 1,
28 'rootdir' => 1,
29 'images' => 1,
30 'iso' => 1,
31 'backup' => 1,
32 'vztmpl' => 1,
33 },
34 },
35 },
36 'order' => {
37 'local' => 1,
38 },
39 };
40
41 # the tests array consists of hashes with the following keys:
42 # description => to identify the test case
43 # volname => to create the test file
44 # expected => the result that path_to_volume_id should return
45 my @tests = (
46 {
47 description => 'Image, qcow2',
48 volname => "$storage_dir/images/16110/vm-16110-disk-0.qcow2",
49 expected => [
50 'images',
51 'local:16110/vm-16110-disk-0.qcow2',
52 ],
53 },
54 {
55 description => 'Image, raw',
56 volname => "$storage_dir/images/16112/vm-16112-disk-0.raw",
57 expected => [
58 'images',
59 'local:16112/vm-16112-disk-0.raw',
60 ],
61 },
62 {
63 description => 'Image template, qcow2',
64 volname => "$storage_dir/images/9004/base-9004-disk-0.qcow2",
65 expected => [
66 'images',
67 'local:9004/base-9004-disk-0.qcow2',
68 ],
69 },
70
71 {
72 description => 'Backup, vma.gz',
73 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz",
74 expected => [
75 'backup',
76 'local:backup/vzdump-qemu-16110-2020_03_30-21_11_40.vma.gz',
77 ],
78 },
79 {
80 description => 'Backup, vma.lzo',
81 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo",
82 expected => [
83 'backup',
84 'local:backup/vzdump-qemu-16110-2020_03_30-21_12_45.vma.lzo',
85 ],
86 },
87 {
88 description => 'Backup, vma',
89 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma",
90 expected => [
91 'backup',
92 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma',
93 ],
94 },
95 {
96 description => 'Backup, tar.lzo',
97 volname => "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo",
98 expected => [
99 'backup',
100 'local:backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo',
101 ],
102 },
103 {
104 description => 'Backup, vma.zst',
105 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst",
106 expected => [
107 'backup',
108 'local:backup/vzdump-qemu-16110-2020_03_30-21_13_55.vma.zst'
109 ],
110 },
111 {
112 description => 'Backup, tar.zst',
113 volname => "$storage_dir/dump/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst",
114 expected => [
115 'backup',
116 'local:backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.zst'
117 ],
118 },
119
120 {
121 description => 'ISO file',
122 volname => "$storage_dir/template/iso/yet-again-a-installation-disk.iso",
123 expected => [
124 'iso',
125 'local:iso/yet-again-a-installation-disk.iso',
126 ],
127 },
128 {
129 description => 'CT template, tar.gz',
130 volname => "$storage_dir/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz",
131 expected => [
132 'vztmpl',
133 'local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz',
134 ],
135 },
136
137 {
138 description => 'Rootdir',
139 volname => "$storage_dir/private/1234/", # fileparse needs / at the end
140 expected => [
141 'rootdir',
142 'local:rootdir/1234',
143 ],
144 },
145 {
146 description => 'Rootdir, folder subvol',
147 volname => "$storage_dir/images/1234/subvol-1234-disk-0.subvol/", # fileparse needs / at the end
148 expected => [
149 'images',
150 'local:1234/subvol-1234-disk-0.subvol'
151 ],
152 },
153 {
154 description => 'Snippets, yaml',
155 volname => "$storage_dir/snippets/userconfig.yaml",
156 expected => [
157 'snippets',
158 'local:snippets/userconfig.yaml',
159 ],
160 },
161 {
162 description => 'Snippets, hookscript',
163 volname => "$storage_dir/snippets/hookscript.pl",
164 expected => [
165 'snippets',
166 'local:snippets/hookscript.pl',
167 ],
168 },
169 {
170 description => 'CT template, tar.xz',
171 volname => "$storage_dir/template/cache/debian-10.0-standard_10.0-1_amd64.tar.xz",
172 expected => [
173 'vztmpl',
174 'local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.xz',
175 ],
176 },
177
178 # no matches, path or files with failures
179 {
180 description => 'Base template, string as vmid in folder name',
181 volname => "$storage_dir/images/ssss/base-4321-disk-0.raw",
182 expected => [''],
183 },
184 {
185 description => 'ISO file, wrong ending',
186 volname => "$storage_dir/template/iso/yet-again-a-installation-disk.dvd",
187 expected => [''],
188 },
189 {
190 description => 'CT template, wrong ending, zip.gz',
191 volname => "$storage_dir/template/cache/debian-10.0-standard_10.0-1_amd64.zip.gz",
192 expected => [''],
193 },
194 {
195 description => 'CT template, wrong ending, tar bz2',
196 volname => "$storage_dir/template/cache/debian-10.0-standard_10.0-1_amd64.tar.bz2",
197 expected => [''],
198 },
199 {
200 description => 'Rootdir as subvol, wrong path',
201 volname => "$storage_dir/private/subvol-19254-disk-0/",
202 expected => [''],
203 },
204 {
205 description => 'Backup, wrong ending, openvz, tar.bz2',
206 volname => "$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.tar.bz2",
207 expected => [''],
208 },
209 {
210 description => 'Backup, wrong format, openvz, zip.gz',
211 volname => "$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.zip.gz",
212 expected => [''],
213 },
214 {
215 description => 'Backup, wrong format, openvz, tgz.lzo',
216 volname => "$storage_dir/dump/vzdump-openvz-16112-2020_03_30-21_39_30.tgz.lzo",
217 expected => [''],
218 },
219 {
220 description => 'Backup, wrong ending, qemu, vma.xz',
221 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz",
222 expected => [''],
223 },
224 {
225 description => 'Backup, wrong format, qemu, vms.gz',
226 volname => "$storage_dir/dump/vzdump-qemu-16110-2020_03_30-21_12_40.vms.gz",
227 expected => [''],
228 },
229 {
230 description => 'Image, string as vmid in folder name',
231 volname => "$storage_dir/images/ssss/vm-1234-disk-0.qcow2",
232 expected => [''],
233 },
234 );
235
236 plan tests => scalar @tests + 1;
237
238 my $seen_vtype;
239 my $vtype_subdirs = { map { $_ => 1 } keys %{ PVE::Storage::Plugin::get_vtype_subdirs() } };
240
241 foreach my $tt (@tests) {
242 my $file = $tt->{volname};
243 my $expected = $tt->{expected};
244 my $description = $tt->{description};
245
246 # prepare environment
247 my ($name, $dir, $suffix) = fileparse($file);
248 make_path($dir, { verbose => 1, mode => 0755 });
249
250 if ($name) {
251 open(my $fh, ">>", "$file") || die "Error open file: $!";
252 close($fh);
253 }
254
255 # run tests
256 my $got;
257 eval { $got = [ PVE::Storage::path_to_volume_id($scfg, $file) ] };
258 $got = $@ if $@;
259
260 is_deeply($got, $expected, $description) || diag(explain($got));
261
262 $seen_vtype->{@$expected[0]} = 1
263 if ( @$expected[0] ne '' && scalar @$expected > 1);
264 }
265
266 # to check if all $vtype_subdirs are defined in path_to_volume_id
267 # or have a test
268 is_deeply($seen_vtype, $vtype_subdirs, "vtype_subdir check");
269
270 #cleanup
271 # File::Temp unlinks tempdir on exit
272
273 done_testing();
274
275 1;