#!/usr/bin/perl
+use lib '..';
+
use strict;
use warnings;
+
use Data::Dumper qw(Dumper);
use PVE::Storage;
use PVE::Cluster;
my $basesnap = '@__base__';
my $tests = {};
-#create zfs suvol for testing
+#create zfs subvol for testing
my $pool = undef;
my $zpath = undef;
my $cfg = undef;
my $test18 = sub {
- print "\nrun test17 \"scan_zfs\"\n";
+ print "\nrun test18 \"scan_zfs\"\n";
my $res;
eval {
eval {
PVE::Storage::activate_storage($cfg, $storagename);
+ PVE::Storage::deactivate_storage($cfg, $storagename);
};
if ($@) {
$count++;
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";
}
});
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";
}
});
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";
}
});
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";
}
});
}
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);
}
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);
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");
$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{
$count++;
warn "Test5 PVE g: snapshot __base__ can be erased";
}
- print "######End Ignroe#######\n";
+ print "######End Ignore#######\n";
};
$tests->{5} = $test5;
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");
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();
sub clean_up_zpool {
eval {
- run_command("zpool destroy $subvol");
+ run_command("zpool destroy -f $subvol");
};
if ($@) {
warn $@;}
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();
print "Stop tests for ZFSPoolPlugin\n";
print "$count tests failed\n";
print "Time: ${time}s\n";
+
+exit -1 if $count > 0;