tests/libtest: Allow appending actions to be run on EXIT

Currently if a test script adds a trap on `EXIT` to run some cleanup, it
will stomp on the existing trap to run `save_core()`. Allow for scripts
to append actions that will run on exit by introducing an array that
will be iterated over by a single exit runner.

Closes: #1799
Approved by: cgwalters
This commit is contained in:
Dan Nicholson 2019-06-13 15:57:17 -05:00 committed by Atomic Bot
parent b6979e7572
commit 0dd27bbf4b
3 changed files with 15 additions and 4 deletions

View File

@ -34,13 +34,24 @@ else
fi
. ${test_srcdir}/libtest-core.sh
# Array of expressions to execute when exiting. Each expression should
# be a single string (quoting if necessary) that will be eval'd. To add
# a command to run on exit, append to the libtest_exit_cmds array like
# libtest_exit_cmds+=(expr).
libtest_exit_cmds=()
run_exit_cmds() {
for expr in "${libtest_exit_cmds[@]}"; do
eval "${expr}" || true
done
}
trap run_exit_cmds EXIT
save_core() {
if [ -e core ]; then
cp core "$test_srcdir/core"
fi
}
trap save_core EXIT;
libtest_exit_cmds+=(save_core)
test_tmpdir=$(pwd)

View File

@ -55,7 +55,7 @@ _mount_cleanup () {
case "${TEST_SKIP_CLEANUP:-}" in
no|"")
trap _mount_cleanup EXIT
libtest_exit_cmds+=(_mount_cleanup)
;;
err)
trap _mount_cleanup ERR

View File

@ -41,7 +41,7 @@ rofiles-fuse checkout-test2 mnt
cleanup_fuse() {
fusermount -u ${test_tmpdir}/mnt || true
}
trap cleanup_fuse EXIT
libtest_exit_cmds+=(cleanup_fuse)
assert_file_has_content mnt/firstfile first
echo "ok mount"