OpenZFS 7290 - ZFS test suite needs to control what utilities it can run

Authored by: John Wren Kennedy <john.kennedy@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Gordon Ross <gordon.w.ross@gmail.com>
Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>
Ported-by: George Melikov <mail@gmelikov.ru>

Porting Notes:
- Utilities which aren't available under Linux have been removed.
- Because of sudo's default secure path behavior PATH must be
  explicitly reset at the top of libtest.shlib.  This avoids the
  need for all users to customize secure path on their system.
- Updated ZoL infrastructure to manage constrained path
- Updated all test cases
- Check permissions for usergroup tests
- When testing in-tree create links under bin/
- Update fault cleanup such that missing files during
  cleanup aren't fatal.
- Configure su environment with constrained path

OpenZFS-issue: https://www.illumos.org/issues/7290
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/1d32ba6
Closes #5903
This commit is contained in:
John Wren Kennedy
2017-04-05 20:18:22 -04:00
committed by Brian Behlendorf
parent 7a4500a101
commit c1d9abf905
797 changed files with 8038 additions and 7458 deletions
@@ -26,7 +26,7 @@
#
#
# Copyright (c) 2013, 2015 by Delphix. All rights reserved.
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
#
. $STF_SUITE/include/libtest.shlib
@@ -50,7 +50,7 @@ function cleanup
if [[ -n "$child_pids" ]]; then
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
fi
@@ -58,7 +58,7 @@ function cleanup
destroy_pool $TESTPOOL1
fi
[[ -e $TESTDIR ]] && log_must $RM -rf $TESTDIR/*
[[ -e $TESTDIR ]] && log_must rm -rf $TESTDIR/*
}
log_assert "Replacing a disk during I/O completes."
@@ -94,38 +94,38 @@ function replace_test
typeset i=0
while [[ $i -lt $iters ]]; do
log_note "Invoking $FILE_TRUNC with: $options_display"
$FILE_TRUNC $options $TESTDIR/$TESTFILE.$i &
log_note "Invoking file_trunc with: $options_display"
file_trunc $options $TESTDIR/$TESTFILE.$i &
typeset pid=$!
$SLEEP 1
sleep 1
child_pids="$child_pids $pid"
((i = i + 1))
done
log_must $ZPOOL replace $opt $TESTPOOL1 $disk1 $disk2
log_must zpool replace $opt $TESTPOOL1 $disk1 $disk2
$SLEEP 10
sleep 10
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
child_pids=""
log_must $ZPOOL export $TESTPOOL1
log_must $ZPOOL import -d $TESTDIR $TESTPOOL1
log_must $ZFS umount $TESTPOOL1/$TESTFS1
log_must $ZDB -cdui $TESTPOOL1/$TESTFS1
log_must $ZFS mount $TESTPOOL1/$TESTFS1
log_must zpool export $TESTPOOL1
log_must zpool import -d $TESTDIR $TESTPOOL1
log_must zfs umount $TESTPOOL1/$TESTFS1
log_must zdb -cdui $TESTPOOL1/$TESTFS1
log_must zfs mount $TESTPOOL1/$TESTFS1
}
specials_list=""
i=0
while [[ $i != 2 ]]; do
$MKFILE $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
mkfile $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
specials_list="$specials_list $TESTDIR/$TESTFILE1.$i"
((i = i + 1))
@@ -134,23 +134,23 @@ done
#
# Create a replacement disk special file.
#
$MKFILE $MINVDEVSIZE $TESTDIR/$REPLACEFILE
mkfile $MINVDEVSIZE $TESTDIR/$REPLACEFILE
for type in "" "raidz" "raidz1" "mirror"; do
for op in "" "-f"; do
create_pool $TESTPOOL1 $type $specials_list
log_must $ZFS create $TESTPOOL1/$TESTFS1
log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_must zfs create $TESTPOOL1/$TESTFS1
log_must zfs set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
replace_test "$opt" $TESTDIR/$TESTFILE1.1 $TESTDIR/$REPLACEFILE
$ZPOOL iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
zpool iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
if [[ $? -ne 0 ]]; then
log_fail "$REPLACEFILE is not present."
fi
destroy_pool $TESTPOOL1
log_must $RM -rf /$TESTPOOL1
log_must rm -rf /$TESTPOOL1
done
done
@@ -26,7 +26,7 @@
#
#
# Copyright (c) 2013, 2015 by Delphix. All rights reserved.
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
#
. $STF_SUITE/include/libtest.shlib
@@ -50,7 +50,7 @@ function cleanup
if [[ -n "$child_pids" ]]; then
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
fi
@@ -58,7 +58,7 @@ function cleanup
destroy_pool $TESTPOOL1
fi
[[ -e $TESTDIR ]] && log_must $RM -rf $TESTDIR/*
[[ -e $TESTDIR ]] && log_must rm -rf $TESTDIR/*
}
log_assert "Replacing a disk during I/O completes."
@@ -94,38 +94,38 @@ function attach_test
typeset i=0
while [[ $i -lt $iters ]]; do
log_note "Invoking $FILE_TRUNC with: $options_display"
$FILE_TRUNC $options $TESTDIR/$TESTFILE.$i &
log_note "Invoking file_trunc with: $options_display"
file_trunc $options $TESTDIR/$TESTFILE.$i &
typeset pid=$!
$SLEEP 1
sleep 1
child_pids="$child_pids $pid"
((i = i + 1))
done
log_must $ZPOOL attach $opt $TESTPOOL1 $disk1 $disk2
log_must zpool attach $opt $TESTPOOL1 $disk1 $disk2
$SLEEP 10
sleep 10
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
child_pids=""
log_must $ZPOOL export $TESTPOOL1
log_must $ZPOOL import -d $TESTDIR $TESTPOOL1
log_must $ZFS umount $TESTPOOL1/$TESTFS1
log_must $ZDB -cdui $TESTPOOL1/$TESTFS1
log_must $ZFS mount $TESTPOOL1/$TESTFS1
log_must zpool export $TESTPOOL1
log_must zpool import -d $TESTDIR $TESTPOOL1
log_must zfs umount $TESTPOOL1/$TESTFS1
log_must zdb -cdui $TESTPOOL1/$TESTFS1
log_must zfs mount $TESTPOOL1/$TESTFS1
}
specials_list=""
i=0
while [[ $i != 2 ]]; do
$MKFILE $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
mkfile $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
specials_list="$specials_list $TESTDIR/$TESTFILE1.$i"
((i = i + 1))
@@ -134,16 +134,16 @@ done
#
# Create a replacement disk special file.
#
$MKFILE $MINVDEVSIZE $TESTDIR/$REPLACEFILE
mkfile $MINVDEVSIZE $TESTDIR/$REPLACEFILE
for op in "" "-f"; do
create_pool $TESTPOOL1 mirror $specials_list
log_must $ZFS create $TESTPOOL1/$TESTFS1
log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_must zfs create $TESTPOOL1/$TESTFS1
log_must zfs set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
attach_test "$opt" $TESTDIR/$TESTFILE1.1 $TESTDIR/$REPLACEFILE
$ZPOOL iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
zpool iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
if [[ $? -ne 0 ]]; then
log_fail "$REPLACEFILE is not present."
fi
@@ -156,13 +156,13 @@ log_note "Verify 'zpool attach' fails with non-mirrors."
for type in "" "raidz" "raidz1"; do
for op in "" "-f"; do
create_pool $TESTPOOL1 $type $specials_list
log_must $ZFS create $TESTPOOL1/$TESTFS1
log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_must zfs create $TESTPOOL1/$TESTFS1
log_must zfs set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_mustnot $ZPOOL attach "$opt" $TESTDIR/$TESTFILE1.1 \
log_mustnot zpool attach "$opt" $TESTDIR/$TESTFILE1.1 \
$TESTDIR/$REPLACEFILE
$ZPOOL iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
zpool iostat -v $TESTPOOL1 | grep "$TESTDIR/$REPLACEFILE"
if [[ $? -eq 0 ]]; then
log_fail "$REPLACEFILE should not be present."
fi
@@ -26,7 +26,7 @@
#
#
# Copyright (c) 2013, 2015 by Delphix. All rights reserved.
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
#
. $STF_SUITE/include/libtest.shlib
@@ -50,7 +50,7 @@ function cleanup
if [[ -n "$child_pids" ]]; then
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
fi
@@ -58,7 +58,7 @@ function cleanup
destroy_pool $TESTPOOL1
fi
[[ -e $TESTDIR ]] && log_must $RM -rf $TESTDIR/*
[[ -e $TESTDIR ]] && log_must rm -rf $TESTDIR/*
}
log_assert "Replacing a disk during I/O completes."
@@ -92,49 +92,49 @@ function detach_test
typeset i=0
while [[ $i -lt $iters ]]; do
log_note "Invoking $FILE_TRUNC with: $options_display"
$FILE_TRUNC $options $TESTDIR/$TESTFILE.$i &
log_note "Invoking file_trunc with: $options_display"
file_trunc $options $TESTDIR/$TESTFILE.$i &
typeset pid=$!
$SLEEP 1
sleep 1
child_pids="$child_pids $pid"
((i = i + 1))
done
log_must $ZPOOL detach $TESTPOOL1 $disk1
log_must zpool detach $TESTPOOL1 $disk1
$SLEEP 10
sleep 10
for wait_pid in $child_pids
do
$KILL $wait_pid
kill $wait_pid
done
child_pids=""
log_must $ZPOOL export $TESTPOOL1
log_must $ZPOOL import -d $TESTDIR $TESTPOOL1
log_must $ZFS umount $TESTPOOL1/$TESTFS1
log_must $ZDB -cdui $TESTPOOL1/$TESTFS1
log_must $ZFS mount $TESTPOOL1/$TESTFS1
log_must zpool export $TESTPOOL1
log_must zpool import -d $TESTDIR $TESTPOOL1
log_must zfs umount $TESTPOOL1/$TESTFS1
log_must zdb -cdui $TESTPOOL1/$TESTFS1
log_must zfs mount $TESTPOOL1/$TESTFS1
}
specials_list=""
i=0
while [[ $i != 2 ]]; do
$MKFILE $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
mkfile $MINVDEVSIZE $TESTDIR/$TESTFILE1.$i
specials_list="$specials_list $TESTDIR/$TESTFILE1.$i"
((i = i + 1))
done
create_pool $TESTPOOL1 mirror $specials_list
log_must $ZFS create $TESTPOOL1/$TESTFS1
log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_must zfs create $TESTPOOL1/$TESTFS1
log_must zfs set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
detach_test $TESTDIR/$TESTFILE1.1
$ZPOOL iostat -v $TESTPOOL1 | grep "$TESTDIR/$TESTFILE1.1"
zpool iostat -v $TESTPOOL1 | grep "$TESTDIR/$TESTFILE1.1"
if [[ $? -eq 0 ]]; then
log_fail "$TESTFILE1.1 should no longer be present."
fi
@@ -145,12 +145,12 @@ log_note "Verify 'zpool detach' fails with non-mirrors."
for type in "" "raidz" "raidz1" ; do
create_pool $TESTPOOL1 $type $specials_list
log_must $ZFS create $TESTPOOL1/$TESTFS1
log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_must zfs create $TESTPOOL1/$TESTFS1
log_must zfs set mountpoint=$TESTDIR1 $TESTPOOL1/$TESTFS1
log_mustnot $ZPOOL detach $TESTDIR/$TESTFILE1.1
log_mustnot zpool detach $TESTDIR/$TESTFILE1.1
$ZPOOL iostat -v $TESTPOOL1 | grep "$TESTDIR/$TESTFILE1.1"
zpool iostat -v $TESTPOOL1 | grep "$TESTDIR/$TESTFILE1.1"
if [[ $? -ne 0 ]]; then
log_fail "$TESTFILE1.1 is not present."
fi