]> git.proxmox.com Git - pve-storage.git/blobdiff - test/run_test_zfspoolplugin.pl
refactor disk/storage checks for Disk API
[pve-storage.git] / test / run_test_zfspoolplugin.pl
index 2512db97dede5292bf799f244c3c5d526f8cdb45..63b1456403dafc888cc9acf1500f3005c703b9c3 100755 (executable)
@@ -1,7 +1,10 @@
 #!/usr/bin/perl
 
+use lib '..';
+
 use strict;
 use warnings;
+
 use Data::Dumper qw(Dumper);
 use PVE::Storage;
 use PVE::Cluster;
@@ -26,7 +29,7 @@ my $ctlinked = "subvol-201-disk-1";
 my $basesnap = '@__base__';
 my $tests = {};
 
-#create zfs suvol for testing
+#create zfs subvol for testing
 my $pool = undef;
 my $zpath = undef;
 my $cfg = undef;
@@ -226,7 +229,7 @@ $tests->{19} = $test19;
 
 my $test18 = sub {
 
-    print "\nrun test17 \"scan_zfs\"\n";
+    print "\nrun test18 \"scan_zfs\"\n";
     my $res;
 
     eval {
@@ -279,6 +282,7 @@ my $test17 = sub {
 
     eval {
        PVE::Storage::activate_storage($cfg, $storagename);
+       PVE::Storage::deactivate_storage($cfg, $storagename);
     };
     if ($@) {
        $count++;
@@ -562,13 +566,13 @@ my $test13 = sub {
     eval {
        my $tmp_volid = PVE::Storage::vdisk_alloc($cfg, $storagename, "112", "raw", undef ,1024 * 1024);
 
-       if ($tmp_volid ne "$storagename:vm-112-disk-1") {
+       if ($tmp_volid ne "$storagename:vm-112-disk-0") {
            die "volname:$tmp_volid don't match\n";
        }
        eval {
-           run_command("zfs get -H volsize $zpath\/vm-112-disk-1", outfunc =>
+           run_command("zfs get -H volsize $zpath\/vm-112-disk-0", outfunc =>
                        sub { my $tmp = shift;
-                             if ($tmp !~ m/^$zpath\/vm-112-disk-1.*volsize.*1G.*$/) {
+                             if ($tmp !~ m/^$zpath\/vm-112-disk-0.*volsize.*1G.*$/) {
                                  die "size don't match\n";
                              }
                        });
@@ -586,13 +590,13 @@ my $test13 = sub {
     eval {
        my $tmp_volid = PVE::Storage::vdisk_alloc($cfg, $storagename, "112", "raw", undef ,2048 * 1024);
 
-       if ($tmp_volid ne "$storagename:vm-112-disk-2") {
+       if ($tmp_volid ne "$storagename:vm-112-disk-1") {
            die "volname:$tmp_volid don't match\n";
        }
        eval {
-           run_command("zfs get -H volsize $zpath\/vm-112-disk-2", outfunc =>
+           run_command("zfs get -H volsize $zpath\/vm-112-disk-1", outfunc =>
                        sub { my $tmp = shift;
-                             if ($tmp !~ m/^$zpath\/vm-112-disk-2.*volsize.*2G.*$/) {
+                             if ($tmp !~ m/^$zpath\/vm-112-disk-1.*volsize.*2G.*$/) {
                                  die "size don't match\n";
                              }
                        });
@@ -610,13 +614,13 @@ my $test13 = sub {
     eval {
        my $tmp_volid = PVE::Storage::vdisk_alloc($cfg, $storagename, "113", "subvol", undef ,1024 * 1024);
 
-       if ($tmp_volid ne "$storagename:subvol-113-disk-1") {
+       if ($tmp_volid ne "$storagename:subvol-113-disk-0") {
            die "volname:$tmp_volid  don't match\n";
        }
        eval {
-           run_command("zfs get -H refquota $zpath\/subvol-113-disk-1", outfunc =>
+           run_command("zfs get -H refquota $zpath\/subvol-113-disk-0", outfunc =>
                        sub { my $tmp = shift;
-                             if ($tmp !~ m/^$zpath\/subvol-113-disk-1.*refquota.*1G.*$/) {
+                             if ($tmp !~ m/^$zpath\/subvol-113-disk-0.*refquota.*1G.*$/) {
                                  die "size don't match\n";
                              }
                        });
@@ -634,13 +638,13 @@ my $test13 = sub {
     eval {
        my $tmp_volid = PVE::Storage::vdisk_alloc($cfg, $storagename, "113", "subvol", undef ,2048 * 1024);
 
-       if ($tmp_volid ne "$storagename:subvol-113-disk-2") {
+       if ($tmp_volid ne "$storagename:subvol-113-disk-1") {
            die "volname:$tmp_volid  don't match\n";
        }
        eval {
-           run_command("zfs get -H refquota $zpath\/subvol-113-disk-2", outfunc =>
+           run_command("zfs get -H refquota $zpath\/subvol-113-disk-1", outfunc =>
                        sub { my $tmp = shift;
-                             if ($tmp !~ m/^$zpath\/subvol-113-disk-2.*refquota.*G.*$/) {
+                             if ($tmp !~ m/^$zpath\/subvol-113-disk-1.*refquota.*G.*$/) {
                                  die "size don't match\n";
                              }
                        });
@@ -752,12 +756,12 @@ my $test11 = sub {
     }
 
     eval {
-       if ("$storagename:$vmbase\/vm-110-disk-1" ne
+       if ("$storagename:$vmbase\/vm-110-disk-0" ne
            PVE::Storage::vdisk_clone($cfg, "$storagename:$vmbase", 110, '__base__')){
            $count++;
            warn  "Test11 b";
        }
-       run_command("zfs list -H -o volsize $zpath\/vm-110-disk-1", outfunc => sub {
+       run_command("zfs list -H -o volsize $zpath\/vm-110-disk-0", outfunc => sub {
            my $line = shift;
 
            chomp($line);
@@ -786,12 +790,12 @@ my $test11 = sub {
     }
 
     eval {
-       if ( "$storagename:$ctbase\/subvol-210-disk-1" ne
+       if ( "$storagename:$ctbase\/subvol-210-disk-0" ne
             PVE::Storage::vdisk_clone($cfg, "$storagename:$ctbase", 210, '__base__')){
            $count++;
            warn  "Test11 e";
        }
-       run_command("zfs list -H -o refquota $zpath\/subvol-210-disk-1", outfunc => sub {
+       run_command("zfs list -H -o refquota $zpath\/subvol-210-disk-0", outfunc => sub {
            my $line = shift;
 
            chomp($line);
@@ -818,7 +822,7 @@ my $test10 =sub {
     print "\nrun test10 \"volume_is_base\"\n";
 
     eval {
-       if (1 == PVE::Storage::volume_is_base($cfg, "$storagename:$vmdisk")) {
+       if (1 == volume_is_base($cfg, "$storagename:$vmdisk")) {
            $count++;
            warn "Test10 a: is no base";
        }
@@ -830,7 +834,7 @@ my $test10 =sub {
     }
 
     eval {
-       if (0 == PVE::Storage::volume_is_base($cfg, "$storagename:$vmbase")) {
+       if (0 == volume_is_base($cfg, "$storagename:$vmbase")) {
            $count++;
            warn "Test10 b: is base";
        }
@@ -842,7 +846,7 @@ my $test10 =sub {
     }
 
     eval {
-       if (1 == PVE::Storage::volume_is_base($cfg, "$storagename:$vmbase\/$vmlinked")) {
+       if (1 == volume_is_base($cfg, "$storagename:$vmbase\/$vmlinked")) {
            $count++;
            warn "Test10 c: is no base";
        }
@@ -854,7 +858,7 @@ my $test10 =sub {
     }
 
     eval {
-       if (1 == PVE::Storage::volume_is_base($cfg, "$storagename:$ctdisk")) {
+       if (1 == volume_is_base($cfg, "$storagename:$ctdisk")) {
            $count++;
            warn "Test10 d: is no base";
        }
@@ -866,7 +870,7 @@ my $test10 =sub {
     }
 
     eval {
-       if (0 == PVE::Storage::volume_is_base($cfg, "$storagename:$ctbase")) {
+       if (0 == volume_is_base($cfg, "$storagename:$ctbase")) {
            $count++;
            warn "Test10 e: is base";
        }
@@ -878,7 +882,7 @@ my $test10 =sub {
     }
 
     eval {
-       if (1 == PVE::Storage::volume_is_base($cfg, "$storagename:$ctbase\/$ctlinked")) {
+       if (1 == volume_is_base($cfg, "$storagename:$ctbase\/$ctlinked")) {
            $count++;
            warn "Test10 f: is no base";
        }
@@ -893,7 +897,7 @@ $tests->{10} = $test10;
 
 my $test9 =sub {
 
-    print "\nrun test9 \"parse_volname\"\n";
+    print "\nrun test9 \"parse_volume_id\"\n";
 
     eval {
        my ($store, $disk) = PVE::Storage::parse_volume_id("$storagename:$vmdisk");
@@ -1619,7 +1623,7 @@ my $test5 = sub {
        $count++;
        warn "Test5 f: $@";
     }
-    print "######Ignore Output if no Test5 g: is includet######\n";
+    print "######Ignore Output if no Test5 g: is included######\n";
     eval{
        PVE::Storage::volume_snapshot_delete($cfg, "$storagename:$vmbase", '__base__');
        eval{
@@ -1634,7 +1638,7 @@ my $test5 = sub {
        $count++;
        warn "Test5 PVE g: snapshot __base__ can be erased";
     }
-    print "######End Ignroe#######\n";
+    print "######End Ignore#######\n";
 };
 $tests->{5} = $test5;
 
@@ -2582,8 +2586,6 @@ $tests->{1} = $test1;
 
 sub setup_zfs {
 
-    my $tmp = undef;
-
     #create VM zvol
     print "create zvol $vmdisk\n" if $verbose;
     run_command("zfs create -V${volsize}G $zpath\/$vmdisk");
@@ -2605,18 +2607,29 @@ sub setup_zfs {
 
     print "create linked clone $vmlinked\n" if $verbose;
     run_command("zfs clone $zpath\/$ctbase$basesnap $zpath\/$ctlinked -o refquota=${volsize}G");
+    run_command("udevadm trigger --subsystem-match block");
+    run_command("udevadm settle --timeout 10 --exit-if-exists=/dev/zvol/$zpath\/$ctlinked");
 }
 
 sub cleanup_zfs {
 
     print "destroy $pool\/$subvol\n" if $verbose;
-    run_command("zfs destroy $zpath -r");
+    eval { run_command("zfs destroy $zpath -r"); };
+    if ($@) {
+       print "cleanup failed: $@\nretrying once\n" if $verbose;
+       eval { run_command("zfs destroy $zpath -r"); };
+       if ($@) {
+           clean_up_zpool();
+           setup_zpool();
+       }
+    }
 }
 
 sub setup_zpool {
 
+    unlink 'zpool.img';
     eval {
-       run_command("dd if=/dev/zero of=zpool.img bs=1M count=8000 ");
+       run_command("truncate -s 8G zpool.img");
     };
     if ($@) {
        clean_up_zpool();
@@ -2633,13 +2646,32 @@ sub setup_zpool {
 sub clean_up_zpool {
 
     eval {
-       run_command("zpool destroy $subvol");
+       run_command("zpool destroy -f $subvol");
     };
     if ($@) {
        warn $@;}
     unlink 'zpool.img';
 }
 
+sub volume_is_base {
+    my ($cfg, $volid) = @_;
+
+    my (undef, undef, undef, undef, undef, $isBase, undef) = PVE::Storage::parse_volname($cfg, $volid);
+
+    return $isBase;
+}
+
+if ($> != 0) { #EUID
+    warn "not root, skipping zfs tests\n";
+    exit 0;
+}
+
+eval { run_command("zpool status"); };
+if ($@) {
+    warn "zpool status failed, not running tests: $@\n";
+    exit 0;
+}
+
 setup_zpool();
 
 my $time = time;
@@ -2677,3 +2709,5 @@ $time = time - $time;
 print "Stop tests for ZFSPoolPlugin\n";
 print "$count tests failed\n";
 print "Time: ${time}s\n";
+
+exit -1 if $count > 0;