diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2016-04-10 10:51:11 -0400 |
---|---|---|
committer | Jeff Darcy <jdarcy@redhat.com> | 2016-04-12 05:04:24 -0700 |
commit | c6d1b9797dd2850cd0b8be7f17a41db525cbe93d (patch) | |
tree | 21a5972bc7f5f6d19e51b27d487a29ae7ef28f42 | |
parent | 5cbe6baa0258074d5003e6cdfc9997adb006750f (diff) |
tests: use trap mechanism to ensure that proper cleanups happen
This actually consists of several parts.
* Added a generic cleanup-scheduling mechanism. Instead of calling
"trap ... EXIT" directly, just call "push_trapfunc ..." instead and
your cleanup function will be called along with any others.
* Converted a few tests to use push_trapfunc.
* Added "push_trapfunc cleanup_lvm" to snapshot.rc to address the
particular problem that's driving this - snapshot tests not calling
cleanup_lvm on their own and leaving bad state for the next test.
Change-Id: I548a97a26328390992fc71ee1f03c0463703f9d7
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/13933
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
-rw-r--r-- | tests/basic/ec/ec.t | 8 | ||||
-rw-r--r-- | tests/bugs/disperse/bug-1161621.t | 5 | ||||
-rw-r--r-- | tests/features/recon.t | 3 | ||||
-rw-r--r-- | tests/snapshot.rc | 5 | ||||
-rw-r--r-- | tests/traps.rc | 22 |
5 files changed, 34 insertions, 9 deletions
diff --git a/tests/basic/ec/ec.t b/tests/basic/ec/ec.t index b07006545b9..f98f2110e8f 100644 --- a/tests/basic/ec/ec.t +++ b/tests/basic/ec/ec.t @@ -1,5 +1,6 @@ #!/bin/bash +. $(dirname $0)/../../traps.rc . $(dirname $0)/../../include.rc . $(dirname $0)/../../volume.rc @@ -155,7 +156,7 @@ function check_perm_file { cleanup TEST useradd -o -M -u ${TEST_UID} ${TEST_USER} -trap "userdel --force ${TEST_USER}" EXIT +push_trapfunc "userdel --force ${TEST_USER}" TEST glusterd TEST pidof glusterd @@ -177,7 +178,7 @@ EXPECT_WITHIN $CHILD_UP_TIMEOUT "10" ec_child_up_count $V0 0 # Create local files for comparisons etc. tmpdir=$(mktemp -d -t ${0##*/}.XXXXXX) -trap "rm -rf $tmpdir" EXIT +push_trapfunc "rm -rf $tmpdir" TEST create_file $tmpdir/create-write 10 TEST create_file $tmpdir/truncate 10 @@ -255,7 +256,4 @@ EXPECT_WITHIN $HEAL_TIMEOUT "Y" check_setxattr $B0/${V0}{0..9} EXPECT_WITHIN $HEAL_TIMEOUT "Y" check_removexattr $B0/${V0}{0..9} EXPECT_WITHIN $HEAL_TIMEOUT "Y" check_perm_file $B0/${V0}{0..9} -TEST rm -rf $tmpdir -TEST userdel --force ${TEST_USER} - cleanup diff --git a/tests/bugs/disperse/bug-1161621.t b/tests/bugs/disperse/bug-1161621.t index 56d4cede090..84361e440dc 100644 --- a/tests/bugs/disperse/bug-1161621.t +++ b/tests/bugs/disperse/bug-1161621.t @@ -1,5 +1,6 @@ #!/bin/bash +. $(dirname $0)/../../traps.rc . $(dirname $0)/../../include.rc . $(dirname $0)/../../volume.rc @@ -16,7 +17,7 @@ TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M1 EXPECT_WITHIN $CHILD_UP_TIMEOUT "5" ec_child_up_count $V0 0 tmpdir=$(mktemp -d -t ${0##*/}.XXXXXX) -trap "rm -rf $tmpdir" EXIT +push_trapfunc "rm -rf $tmpdir" TEST dd if=/dev/urandom of=$tmpdir/file bs=1234 count=20 cs=$(sha1sum $tmpdir/file | awk '{ print $1 }') @@ -38,6 +39,4 @@ wait EXPECT "24680000" stat -c "%s" $M0/shared EXPECT "$cs" echo $(sha1sum $M0/shared | awk '{ print $1 }') -TEST rm -rf $tmpdir - cleanup diff --git a/tests/features/recon.t b/tests/features/recon.t index 7dda2a680e8..9989f243380 100644 --- a/tests/features/recon.t +++ b/tests/features/recon.t @@ -1,5 +1,6 @@ #!/bin/bash +. $(dirname $0)/../traps.rc . $(dirname $0)/../include.rc . $(dirname $0)/../volume.rc @@ -11,7 +12,7 @@ FDL_META_FILE=${log_base}/${log_id}-meta-1.jnl FDL_DATA_FILE=${log_base}/${log_id}-data-1.jnl tmpdir=$(mktemp -d -t ${0##*/}.XXXXXX) -trap "rm -rf $tmpdir" EXIT +push_trapfunc "rm -rf $tmpdir" write_file () { echo "peekaboo" > $1 diff --git a/tests/snapshot.rc b/tests/snapshot.rc index cca1f4d4988..f6da514f826 100644 --- a/tests/snapshot.rc +++ b/tests/snapshot.rc @@ -94,6 +94,11 @@ function cleanup_lvm() { return 0 } +# Find out how this file was sourced, source traps.rc the same way, and use +# push_trapfunc to make sure cleanup_lvm gets called before we exit. +. $(dirname ${BASH_SOURCE[0]})/traps.rc +push_trapfunc cleanup_lvm + ######################################################## # Private Functions ######################################################## diff --git a/tests/traps.rc b/tests/traps.rc new file mode 100644 index 00000000000..f011960c97e --- /dev/null +++ b/tests/traps.rc @@ -0,0 +1,22 @@ +#!/bin/bash + +# Make sure this only gets included/executed once. Unfortunately, bash doesn't +# usually distinguish between values that are unset and values that are null. +# To work around that, we declare TRAPFUNCS to be a one-element array right at +# the start, but that one element is : which is defined to do nothing. + +if [ ${#TRAPFUNCS[@]} = 0 ]; then + TRAPFUNCS=(:) + + push_trapfunc () { + TRAPFUNCS[${#TRAPFUNCS[@]}]="$@" + } + + execute_trapfuncs () { + for i in "${TRAPFUNCS[@]}"; do + $i + done + } + + trap execute_trapfuncs EXIT +fi |