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 /tests | |
| 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>
Diffstat (limited to 'tests')
| -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  | 
