[pve-devel] [PATCH pve-storage v4 3/3] update test for recursive subdir search
Noel Ullreich
n.ullreich at proxmox.com
Fri Jul 21 14:23:13 CEST 2023
Tests now also test if traversing subdirectories works. That means
checking if:
- parent directories in paths are caught
- checking that nested files are found
- checking that files below the maximum depth set are not found
Signed-off-by: Noel Ullreich <n.ullreich at proxmox.com>
---
src/test/filesystem_path_test.pm | 18 +++++++++
src/test/list_volumes_test.pm | 68 ++++++++++++++++++++++++++++++++
src/test/parse_volname_test.pm | 40 +++++++++++++++++++
3 files changed, 126 insertions(+)
diff --git a/src/test/filesystem_path_test.pm b/src/test/filesystem_path_test.pm
index c1b6d90..35a1d4e 100644
--- a/src/test/filesystem_path_test.pm
+++ b/src/test/filesystem_path_test.pm
@@ -56,6 +56,24 @@ my $tests = [
'iso'
],
},
+ {
+ volname => 'iso/a/b/c/my-awesome-proxmox.iso',
+ snapname => undef,
+ expected => [
+ "$path/template/iso/a/b/c/my-awesome-proxmox.iso",
+ undef,
+ 'iso'
+ ],
+ },
+ {
+ volname => 'vztmpl/a/b/c/my-awesome-template.tar.gz',
+ snapname => undef,
+ expected => [
+ "$path/template/cache/a/b/c/my-awesome-template.tar.gz",
+ undef,
+ 'vztmpl'
+ ],
+ },
{
volname => "backup/vzdump-qemu-1234-2020_03_30-21_12_40.vma",
snapname => undef,
diff --git a/src/test/list_volumes_test.pm b/src/test/list_volumes_test.pm
index d155cb9..bfc8582 100644
--- a/src/test/list_volumes_test.pm
+++ b/src/test/list_volumes_test.pm
@@ -74,6 +74,7 @@ my $scfg = {
'snippets' => 1,
'backup' => 1,
},
+ 'scan-depth' => 10,
};
# The test cases are comprised of an arry of hashes with the following keys:
@@ -448,6 +449,73 @@ my @tests = (
],
expected => [], # returns empty list
},
+ {
+ descripton => 'VMID: none, subdirectory',
+ # find files in subdirectories, test if maximum depth is working
+ vmid => undef,
+ files => [
+ "$storage_dir/template/cache/dir1/dir2/uwuntu-3.10-default_20190626_amd64.tar.xz",
+ "$storage_dir/template/iso/a/b/c/installation-disk.iso",
+ "$storage_dir/template/iso/a/b/c/d.d/yet-again-an-installation-disk.iso",
+ "$storage_dir/template/iso/a/b/template/iso/c/d/another-installation-disk.iso",
+ "$storage_dir/template/iso/1/2/3/4/5/6/7/8/9/10//wunkus.iso", # test depth
+ "$storage_dir/template/iso/1/2/3/4/5/6/7/8/9/10/11/wunkus.iso", # this should not match
+ "$storage_dir/template/iso/a/../somedir/little.iso",
+ "$storage_dir/template/iso/a/../../somedir/little.iso", # this should not match
+ "$storage_dir/snippets/a/b/c/d/userconfig.yaml",
+ ],
+ expected => [
+ {
+ 'content' => 'vztmpl',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'txz',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:vztmpl/dir1/dir2/uwuntu-3.10-default_20190626_amd64.tar.xz',
+ },
+ {
+ 'content' => 'iso',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'iso',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:iso/1/2/3/4/5/6/7/8/9/10/wunkus.iso',
+ },
+ {
+ 'content' => 'iso',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'iso',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:iso/a/b/c/d.d/yet-again-an-installation-disk.iso',
+ },
+ {
+ 'content' => 'iso',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'iso',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:iso/a/b/c/installation-disk.iso',
+ },
+ {
+ 'content' => 'iso',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'iso',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:iso/a/b/template/iso/c/d/another-installation-disk.iso',
+ },
+ {
+ 'content' => 'iso',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'iso',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:iso/somedir/little.iso',
+ },
+ {
+ 'content' => 'snippets',
+ 'ctime' => DEFAULT_CTIME,
+ 'format' => 'snippet',
+ 'size' => DEFAULT_SIZE,
+ 'volid' => 'local:snippets/a/b/c/d/userconfig.yaml',
+ },
+ ],
+ }
);
diff --git a/src/test/parse_volname_test.pm b/src/test/parse_volname_test.pm
index d6ac885..737ae9e 100644
--- a/src/test/parse_volname_test.pm
+++ b/src/test/parse_volname_test.pm
@@ -31,11 +31,26 @@ my $tests = [
volname => 'iso/some-installation-disk.iso',
expected => ['iso', 'some-installation-disk.iso'],
},
+ {
+ description => 'ISO image, iso, nested',
+ volname => 'iso/a/b/c/some-installation-disk.iso',
+ expected => ['iso', 'a/b/c/some-installation-disk.iso'],
+ },
{
description => 'ISO image, img',
volname => 'iso/some-other-installation-disk.img',
expected => ['iso', 'some-other-installation-disk.img'],
},
+ {
+ description => 'ISO image, img, nested',
+ volname => 'iso/a/b/c/some-other-installation-disk.img',
+ expected => ['iso', 'a/b/c/some-other-installation-disk.img'],
+ },
+ {
+ description => 'ISO image, img, nested with dots',
+ volname => 'iso/a/b.b/c/some-other-installation-disk.img',
+ expected => ['iso', 'a/b.b/c/some-other-installation-disk.img'],
+ },
#
# container templates
#
@@ -44,11 +59,21 @@ my $tests = [
volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz',
expected => ['vztmpl', 'debian-10.0-standard_10.0-1_amd64.tar.gz'],
},
+ {
+ description => 'Container template tar.gz nested',
+ volname => 'vztmpl/a/b/c/debian-10.0-standard_10.0-1_amd64.tar.gz',
+ expected => ['vztmpl', 'a/b/c/debian-10.0-standard_10.0-1_amd64.tar.gz'],
+ },
{
description => 'Container template tar.xz',
volname => 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.xz',
expected => ['vztmpl', 'debian-10.0-standard_10.0-1_amd64.tar.xz'],
},
+ {
+ description => 'Container template tar.xz nested',
+ volname => 'vztmpl/a/b/c/debian-10.0-standard_10.0-1_amd64.tar.xz',
+ expected => ['vztmpl', 'a/b/c/debian-10.0-standard_10.0-1_amd64.tar.xz'],
+ },
#
# container rootdir
#
@@ -123,6 +148,21 @@ my $tests = [
volname => "$vmid/base-$vmid-disk-0.qcow2/ssss/vm-$vmid-disk-0.qcow2",
expected => "unable to parse volume filename 'base-$vmid-disk-0.qcow2/ssss/vm-$vmid-disk-0.qcow2'\n",
},
+ {
+ description => 'Failed match: ISO image, forbidden double dots between two /',
+ volname => 'iso/a/../c/some-installation-disk.iso',
+ expected => "volname must not contain parent directories '/../'\n",
+ },
+ {
+ description => 'Failed match: ISO image, forbidden double dots in the beginning',
+ volname => '../iso/some-installation-disk.iso',
+ expected => "volname must not contain parent directories '/../'\n",
+ },
+ {
+ description => 'Failed match: ISO image, forbidden double dots in the end',
+ volname => 'iso/some-installation-disk.iso/..',
+ expected => "volname must not contain parent directories '/../'\n",
+ },
];
# create more test cases for VM disk images matches
--
2.39.2
More information about the pve-devel
mailing list