Test to reduce the potential for accidental breakage on regex changes. Signed-off-by: Alwin Antreich <a.antre...@proxmox.com> --- test/run_parser_tests.pl | 2 +- test/test_parse_volname.pm | 95 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 test/test_parse_volname.pm
diff --git a/test/run_parser_tests.pl b/test/run_parser_tests.pl index 042112c..79093aa 100755 --- a/test/run_parser_tests.pl +++ b/test/run_parser_tests.pl @@ -6,7 +6,7 @@ use warnings; use TAP::Harness; my $harness = TAP::Harness->new( { verbosity => -1 }); -my $res = $harness->runtests("test_archive_info.pm"); +my $res = $harness->runtests("test_archive_info.pm", "test_parse_volname.pm"); exit -1 if !$res || $res->{failed} || $res->{parse_errors}; diff --git a/test/test_parse_volname.pm b/test/test_parse_volname.pm new file mode 100644 index 0000000..84665d3 --- /dev/null +++ b/test/test_parse_volname.pm @@ -0,0 +1,95 @@ +package PVE::Storage::TestParseVolname; + +use strict; +use warnings; + +use lib qw(..); + +use PVE::Storage; +use Test::More; + +my @tests = ( + # VM images + [ '4321/base-4321-disk-0.raw/1234/vm-1234-disk-0.raw', ['images', 'vm-1234-disk-0.raw', '1234', 'base-4321-disk-0.raw', '4321', undef, 'raw'], 'VM disk image, linked, raw' ], + [ '4321/base-4321-disk-0.qcow2/1234/vm-1234-disk-0.qcow2', ['images', 'vm-1234-disk-0.qcow2', '1234', 'base-4321-disk-0.qcow2', '4321', undef, 'qcow2'], 'VM disk image, linked, qcow2' ], + [ '4321/base-4321-disk-0.vmdk/1234/vm-1234-disk-0.vmdk', ['images', 'vm-1234-disk-0.vmdk', '1234', 'base-4321-disk-0.vmdk', '4321', undef, 'vmdk'], 'VM disk image, linked, vmdk' ], + + [ '4321/vm-4321-disk-0.qcow2/1234/vm-1234-disk-0.qcow2', ['images', 'vm-1234-disk-0.qcow2', '1234', 'vm-4321-disk-0.qcow2', '4321', undef, 'qcow2'], 'VM disk image, linked, qcow2, vm- as base-' ], + + [ '1234/vm-1234-disk-1.raw', ['images', 'vm-1234-disk-1.raw', '1234', undef, undef, undef, 'raw'], 'VM disk image, raw' ], + [ '1234/vm-1234-disk-1.qcow2', ['images', 'vm-1234-disk-1.qcow2', '1234', undef, undef, undef, 'qcow2'], 'VM disk image, qcow2' ], + [ '1234/vm-1234-disk-1.vmdk', ['images', 'vm-1234-disk-1.vmdk', '1234', undef, undef, undef, 'vmdk'], 'VM disk image, vmdk' ], + + [ '4321/base-4321-disk-0.raw', ['images', 'base-4321-disk-0.raw', '4321', undef, undef, 'base-', 'raw'], 'VM disk image, base, raw' ], + [ '4321/base-4321-disk-0.qcow2', ['images', 'base-4321-disk-0.qcow2', '4321', undef, undef, 'base-', 'qcow2'], 'VM disk image, base, qcow2' ], + [ '4321/base-4321-disk-0.vmdk', ['images', 'base-4321-disk-0.vmdk', '4321', undef, undef, 'base-', 'vmdk'], 'VM disk image, base, vmdk' ], + + # iso + [ 'iso/some-installation-disk.iso', ['iso', 'some-installation-disk.iso'], 'ISO image, iso' ], + [ 'iso/some-other-installation-disk.img', ['iso', 'some-other-installation-disk.img'], 'ISO image, img' ], + + # container templates + [ 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz', ['vztmpl', 'debian-10.0-standard_10.0-1_amd64.tar.gz'], 'Container template tar.gz' ], + [ 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.xz', ['vztmpl', 'debian-10.0-standard_10.0-1_amd64.tar.xz'], 'Container template tar.xz' ], + + # container rootdir + [ 'rootdir/1234', ['rootdir', '1234', '1234'], 'Container rootdir, sub directory' ], + [ '1234/subvol-1234-disk-0.subvol', ['images', 'subvol-1234-disk-0.subvol', '1234', undef, undef, undef, 'subvol'], 'Container rootdir, subvol' ], + + # backup archives + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma', '16110'], 'Backup archive, vma' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma.gz', '16110'], 'Backup archive, vma, gz' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', ['backup', 'vzdump-qemu-16110-2020_03_30-21_12_40.vma.lzo', '16110'], 'Backup archive, vma, lzo' ], + + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar', '16112'], 'Backup archive, lxc' ], + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.gz', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar.gz', '16112'], 'Backup archive, lxc, gz' ], + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tgz', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tgz', '16112'], 'Backup archive, lxc, tgz' ], + [ 'backup/vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo', ['backup', 'vzdump-lxc-16112-2020_03_30-21_39_30.tar.lzo', '16112'], 'Backup archive, lxc, lzo' ], + + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar', '16112'], 'Backup archive, openvz' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.gz', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar.gz', '16112'], 'Backup archive, openvz, gz' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tgz', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tgz', '16112'], 'Backup archive, openvz, tgz' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.lzo', ['backup', 'vzdump-openvz-16112-2020_03_30-21_39_30.tar.lzo', '16112'], 'Backup archive, openvz, lzo' ], + + [ 'backup/vzdump-none-16112-2020_03_30-21_39_30.tar', ['backup', 'vzdump-none-16112-2020_03_30-21_39_30.tar'], 'Backup archive, no virtualization type' ], + + # Snippets + [ 'snippets/userconfig.yaml', ['snippets', 'userconfig.yaml'], 'Snippets, yaml' ], + [ 'snippets/hookscript.pl', ['snippets', 'hookscript.pl'], 'Snippets, perl' ], + + # failed matches + [ 'ssss/base-4321-disk-0.raw', "unable to parse directory volume name 'ssss/base-4321-disk-0.raw'\n", 'Failed match: VM disk image, base, raw' ], + + [ 'iso/yet-again-a-installation-disk.dvd', "unable to parse directory volume name 'iso/yet-again-a-installation-disk.dvd'\n", 'Failed match: ISO image, dvd' ], + + [ 'vztmpl/debian-10.0-standard_10.0-1_amd64.zip.gz', "unable to parse directory volume name 'vztmpl/debian-10.0-standard_10.0-1_amd64.zip.gz'\n", 'Failed match: Container template, zip.gz' ], + [ 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.bz2', "unable to parse directory volume name 'vztmpl/debian-10.0-standard_10.0-1_amd64.tar.bz2'\n", 'Failed match: Container template, tar.bz2' ], + + [ 'rootdir/subvol-19254-disk-0', "unable to parse directory volume name 'rootdir/subvol-19254-disk-0'\n", 'Failed match: Container rootdir, subvol' ], + + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.bz2', "unable to parse directory volume name 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tar.bz2'\n", 'Failed match: Backup archive, openvz, bz2' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.zip.gz', "unable to parse directory volume name 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.zip.gz'\n", 'Failed match: Backup archive, openvz, zip.gz' ], + [ 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tgz.lzo', "unable to parse directory volume name 'backup/vzdump-openvz-16112-2020_03_30-21_39_30.tgz.lzo'\n", 'Failed match: Backup archive, openvz, tgz.lzo' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz', "unable to parse directory volume name 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vma.xz'\n", 'Failed match: Backup archive, vma, xz' ], + [ 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vms.gz', "unable to parse directory volume name 'backup/vzdump-qemu-16110-2020_03_30-21_12_40.vms.gz'\n", 'Failed match: Backup archive, vms, gz' ], + + [ '4321/base-4321-disk-0.vhdx/1234/vm-1234-disk-0.vhdx', "unable to parse volume filename 'base-4321-disk-0.vhdx'\n", 'Failed match: VM disk image, linked, vhdx' ], + [ 'ssss/base-4321-disk-0.qcow2/1234/vm-1234-disk-0.qcow2', "unable to parse directory volume name 'ssss/base-4321-disk-0.qcow2/1234/vm-1234-disk-0.qcow2'\n", 'Failed match: VM disk image, linked, qcow2, first vmid' ], + [ '4321/base-4321-disk-0.qcow2/ssss/vm-1234-disk-0.qcow2', "unable to parse volume filename 'base-4321-disk-0.qcow2/ssss/vm-1234-disk-0.qcow2'\n", 'Failed match: VM disk image, linked, qcow2, second vmid' ], + +); + +plan tests => scalar @tests; + +foreach my $t (@tests) { + my ($volname, $expected, $description) = @$t; + my $got; + eval { $got = [ PVE::Storage::Plugin->parse_volname($volname) ] }; + $got = $@ if $@; + + is_deeply($got, $expected, $description); +} + +done_testing(); + +1; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel