Skip to content

ZTS: Improve cleanup in zpool tests #11694

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions tests/zfs-tests/tests/functional/cli_root/zpool/zpool_002_pos.ksh
Original file line number Diff line number Diff line change
Expand Up @@ -47,31 +47,32 @@ function cleanup
{
unset ZFS_ABORT

if [[ -d $corepath ]]; then
rm -rf $corepath
if is_freebsd && [ -n "$old_corefile" ]; then
sysctl kern.corefile=$old_corefile
fi

if poolexists $pool; then
log_must zpool destroy -f $pool
fi
# Clean up the pool created if we failed to abort.
poolexists $pool && destroy_pool $pool

rm -rf $corepath $vdev1 $vdev2 $vdev3
}

log_assert "With ZFS_ABORT set, all zpool commands can abort and generate a core file."
log_onexit cleanup

#preparation work for testing
corepath=$TESTDIR/core
corefile=$corepath/zpool.core
if [[ -d $corepath ]]; then
rm -rf $corepath
log_must rm -rf $corepath
fi
mkdir $corepath
log_must mkdir $corepath

pool=pool.$$
vdev1=$TESTDIR/file1
vdev2=$TESTDIR/file2
vdev3=$TESTDIR/file3
for vdev in $vdev1 $vdev2 $vdev3; do
mkfile $MINVDEVSIZE $vdev
log_must mkfile $MINVDEVSIZE $vdev
done

set -A cmds "create $pool mirror $vdev1 $vdev2" "list $pool" "iostat $pool" \
Expand All @@ -86,27 +87,25 @@ set -A badparams "" "create" "destroy" "add" "remove" "list *" "iostat" "status"
"import" "export" "upgrade" "history -?" "get" "set"

if is_linux; then
ulimit -c unlimited
echo "$corepath/core.zpool" >/proc/sys/kernel/core_pattern
echo $corefile >/proc/sys/kernel/core_pattern
echo 0 >/proc/sys/kernel/core_uses_pid
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
elif is_freebsd; then
ulimit -c unlimited
log_must sysctl kern.corefile=$corepath/core.zpool
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
else
coreadm -p ${corepath}/core.%f
old_corefile=$(sysctl -n kern.corefile)
log_must sysctl kern.corefile=$corefile
fi
ulimit -c unlimited

export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
export ZFS_ABORT=yes

for subcmd in "${cmds[@]}" "${badparams[@]}"; do
corefile=${corepath}/core.zpool
zpool $subcmd >/dev/null 2>&1
if [[ ! -e $corefile ]]; then
log_fail "zpool $subcmd cannot generate core file with ZFS_ABORT set."
log_fail "zpool $subcmd cannot generate core file with ZFS_ABORT set."
fi
rm -f $corefile
done

unset ZFS_ABORT

log_pass "With ZFS_ABORT set, zpool command can abort and generate core file as expected."
39 changes: 25 additions & 14 deletions tests/zfs-tests/tests/functional/cli_root/zpool/zpool_003_pos.ksh
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,32 @@

function cleanup
{
unset ZFS_ABORT

if is_freebsd && [ -n "$old_corefile" ]; then
sysctl kern.corefile=$old_corefile
fi

rm -rf $corepath

# Don't leave the pool frozen.
destroy_pool $TESTPOOL
default_mirror_setup $DISKS
}

verify_runnable "both"

log_assert "Debugging features of zpool should succeed."
log_onexit cleanup

log_must zpool -? > /dev/null 2>&1
corepath=$TESTDIR/core
corefile=$corepath/zpool.core
if [[ -d $corepath ]]; then
log_must rm -rf $corepath
fi
log_must mkdir $corepath

log_must eval "zpool -? >/dev/null 2>&1"

if is_global_zone ; then
log_must zpool freeze $TESTPOOL
Expand All @@ -65,26 +80,22 @@ fi

log_mustnot zpool freeze fakepool

# Remove corefile possibly left by previous failing run of this test.
[[ -f core ]] && log_must rm -f core

if is_linux; then
ulimit -c unlimited
echo "core" >/proc/sys/kernel/core_pattern
echo $corefile >/proc/sys/kernel/core_pattern
echo 0 >/proc/sys/kernel/core_uses_pid
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
elif is_freebsd; then
ulimit -c unlimited
old_corefile=$(sysctl -n kern.corefile)
log_must sysctl kern.corefile=core
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
log_must sysctl kern.corefile=$corefile
fi
ulimit -c unlimited

export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
export ZFS_ABORT=yes

zpool >/dev/null 2>&1

ZFS_ABORT=1; export ZFS_ABORT
zpool > /dev/null 2>&1
unset ZFS_ABORT

[[ -f core ]] || log_fail "zpool did not dump core by request."
[[ -f core ]] && log_must rm -f core
[[ -f $corefile ]] || log_fail "zpool did not dump core by request."

log_pass "Debugging features of zpool succeed."