Separate test cleanup code in output and clean up ctdb restart code.
authorMartin Schwenke <martin@meltin.net>
Fri, 3 Jul 2009 07:40:16 +0000 (17:40 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Tue, 7 Jul 2009 23:40:11 +0000 (09:40 +1000)
* ctdb_restart_when_done() now schedules a restart by setting an
  explicit variable that is respected in ctdb_test_exit(), rather than
  adding a restart to $ctdb_test_exit_hook.  This means that restarts
  are all done in one place.

* ctdb_test_exit() turns off "set -e" to make sure that all cleanup
  happens.

* ctdb_test_exit() now prints a clear message indicating where the
  test ends and the cleanup begins.  This message also includes the
  return code of the test.

* Add debug in cluster_is_healthy to try to capture information about
  unexpected unhealthiness when a test starts.

* Simplify simple/07_ctdb_process_exists.sh so that the exit code is
  generated more obviously.

* Remove redundant calls to ctdb_test_exit at the end of tests, since
  they're done automatically via a trap.  Also remove any preceding
  warnings of restarts or final hints about test success/failure.

* Allow multi-digit debug levels in simple/12_ctdb_getdebug.sh and
  simple/13_ctdb_setdebug.sh.

Signed-off-by: Martin Schwenke <martin@meltin.net>
36 files changed:
tests/scripts/ctdb_test_functions.bash
tests/simple/00_ctdb_init.sh
tests/simple/01_ctdb_version.sh
tests/simple/02_ctdb_listvars.sh
tests/simple/03_ctdb_getvar.sh
tests/simple/04_ctdb_setvar.sh
tests/simple/05_ctdb_listnodes.sh
tests/simple/06_ctdb_getpid.sh
tests/simple/07_ctdb_process_exists.sh
tests/simple/08_ctdb_isnotrecmaster.sh
tests/simple/09_ctdb_ping.sh
tests/simple/11_ctdb_ip.sh
tests/simple/12_ctdb_getdebug.sh
tests/simple/13_ctdb_setdebug.sh
tests/simple/14_ctdb_statistics.sh
tests/simple/15_ctdb_statisticsreset.sh
tests/simple/16_ctdb_config_add_ip.sh
tests/simple/17_ctdb_config_delete_ip.sh
tests/simple/18_ctdb_freeze.sh
tests/simple/19_ctdb_thaw.sh
tests/simple/20_ctdb_getmonmode.sh
tests/simple/21_ctdb_disablemonitor.sh
tests/simple/22_ctdb_enablemonitor.sh
tests/simple/23_ctdb_moveip.sh
tests/simple/24_ctdb_getdbmap.sh
tests/simple/25_dumpmemory.sh
tests/simple/26_ctdb_config_check_error_on_unreachable_ctdb.sh
tests/simple/31_ctdb_disable.sh
tests/simple/32_ctdb_enable.sh
tests/simple/41_ctdb_ban.sh
tests/simple/42_ctdb_unban.sh
tests/simple/51_ctdb_bench.sh
tests/simple/52_ctdb_fetch.sh
tests/simple/53_ctdb_transaction.sh
tests/simple/61_ctdb_persistent_safe.sh
tests/simple/62_ctdb_persistent_unsafe.sh

index 210e6c4853c194e5b6662b5652d6d5d81dd3ea12..6485868cc2df152eb8be2f9ee0ac6c6e7fb3f0d3 100644 (file)
@@ -60,12 +60,20 @@ ctdb_test_exit ()
     trap - 0
 
     [ $(($testfailures+0)) -eq 0 -a $status -ne 0 ] && testfailures=$status
+    status=$(($testfailures+0))
+
+    # Avoid making a test fail from this point onwards.  The test is
+    # now complete.
+    set +e
+
+    echo "*** TEST COMPLETE (RC=$status), CLEANING UP..."
 
     eval "$ctdb_test_exit_hook" || true
     unset ctdb_test_exit_hook
 
-    if ! onnode 0 $CTDB_TEST_WRAPPER cluster_is_healthy ; then
-       echo "Restarting ctdb on all nodes to get back into known state..."
+    if $ctdb_test_restart_scheduled || \
+       ! onnode 0 CTDB_TEST_CLEANING_UP=1 $CTDB_TEST_WRAPPER cluster_is_healthy ; then
+
        restart_ctdb
     else
        # This could be made unconditional but then we might get
@@ -76,7 +84,7 @@ ctdb_test_exit ()
        onnode 0 ctdb recover
     fi
 
-    test_exit
+    exit $status
 }
 
 ctdb_test_exit_hook_add ()
@@ -149,6 +157,7 @@ ctdb_test_init ()
 {
     scriptname=$(basename "$0")
     testfailures=0
+    ctdb_test_restart_scheduled=false
 
     ctdb_test_cmd_options $@
 
@@ -309,6 +318,14 @@ cluster_is_healthy ()
        exit 0
     else
        echo "Cluster is UNHEALTHY"
+       if [ -z "$CTDB_TEST_CLEANING_UP" ] ; then
+           echo "DEBUG:"
+           local i
+           for i in "ctdb status" "onnode -q 0 onnode all ctdb scriptstatus" ; do
+               echo "$i"
+               $i || true
+           done
+       fi
        exit 1
     fi
 }
@@ -591,9 +608,11 @@ setup_ctdb ()
 
 restart_ctdb ()
 {
-    if [ "$1" = "-v" ] ; then
-       echo "Restarting CTDB (scheduled)..."
+    echo -n "Restarting CTDB"
+    if $ctdb_test_restart_scheduled ; then
+       echo -n " (scheduled)"
     fi
+    echo "..."
     
     if [ -n "$CTDB_NODES_SOCKETS" ] ; then
        daemons_stop
@@ -621,11 +640,9 @@ restart_ctdb ()
 
 ctdb_restart_when_done ()
 {
-    ctdb_test_exit_hook_add restart_ctdb -v
+    ctdb_test_restart_scheduled=true
 }
 
-
-
 #######################################
 
 install_eventscript ()
index 86296f18ff526baffbe560451808f06e1d11ff66..7b05b069c0756dcbeea59b97c1df3f68a712d91b 100755 (executable)
@@ -28,6 +28,5 @@ ctdb_test_init "$@"
 
 set -e
 
-echo "Restarting ctdb on all nodes..."
 setup_ctdb
 restart_ctdb
index 1cc506fbc00ea56321bab1791ad90dac70bdd295..69a861b7217031b3f0f8f0759412090f4ac09f56 100755 (executable)
@@ -48,5 +48,3 @@ else
     echo "BAD: CTDB version != RPM version"
     testfailures=1
 fi
-
-ctdb_test_exit
index ddd77f71f85cc4fe0bbfb32b4f075e31d8de9582..935e676b925a76e308c8b52b44ceba2b17525572 100755 (executable)
@@ -39,5 +39,3 @@ sanity_check_output \
     5 \
     '^[[:alpha:]]+[[:space:]]*=[[:space:]]*[[:digit:]]+$' \
     "$out"
-
-ctdb_test_exit
index cae0f6984bcf249f2db6a72bca84df545c56e9ea..0ff0eef41985602b27317d7fad1dd258cb4a6bbf 100755 (executable)
@@ -49,7 +49,3 @@ while read var x val ; do
        exit 1
     fi
 done
-
-testfailures=$?
-
-ctdb_test_exit
index ceb6c2361d56c90821c62353d9f08d0bf97e24da..336eb392876d7c597d3019a6d62069a4cbe68eb3 100755 (executable)
@@ -77,7 +77,3 @@ fi
 echo "Look's good!  Putting the old value back..."
 cmd="$CTDB setvar $var $val"
 try_command_on_node 0 $cmd
-
-echo "All done..."
-
-ctdb_test_exit
index 6e6af1f8b15a299c64b1cb0a361ff47e16e22667..4e4df5d0ffc289967a3b0b69e4e0717c25bbab29 100755 (executable)
@@ -57,5 +57,3 @@ while [ $n -lt $num_nodes ] ; do
     fi
     n=$(($n + 1))
 done
-
-ctdb_test_exit
index 9759df1cd9b289d051ae491cb35290b3ed8b03ca..3989d00c7952bd1d718c1267103e4d85c131e233 100755 (executable)
@@ -82,5 +82,3 @@ while [ $n -lt $num_nodes ] ; do
     fi
     n=$(($n + 1))
 done <<<"$pids_onnode"
-
-ctdb_test_exit
index 01c186c87ba5e2fce97a485dbb45b32e884673c8..da896714ce58cf869619dc4593243a57127e4f00 100755 (executable)
@@ -63,16 +63,4 @@ try_command_on_node $test_node 'echo $$'
 pid="$out"
 
 echo "Checking for PID $pid on node $test_node"
-# set -e is good, but avoid it here
-status=0
-onnode 0 "$CTDB process-exists ${test_node}:${pid}" || status=$?
-echo "$out"
-
-if [ $status -ne 0 ] ; then
-    echo "OK"
-else
-    echo "BAD"
-    testfailures=1
-fi
-
-ctdb_test_exit
+try_command_on_node -v 0 "! $CTDB process-exists ${test_node}:${pid}"
index f5f9c6c077fa1b6d2bef73b486262c75a14c109e..1704032fc4b36be78e87777d2afacd57184a0ce4 100755 (executable)
@@ -54,5 +54,3 @@ else
     echo "BAD, there are only ${num_not_rm_lines} nodes claiming not to be the recmaster"
     testfailures=1
 fi
-
-ctdb_test_exit
index bd23f77b59cc11fa99c54e95aab3c3fdda0eae4b..bc315dfee0ea8172b47c05e4cd7192a125c9e73c 100755 (executable)
@@ -52,7 +52,3 @@ sanity_check_output \
     1 \
     "(: ctdb_control error: 'ctdb_control to disconnected node'|Unable to get ping response from node 1|Node 1 is DISCONNECTED)" \
     "$out"
-
-echo "Expect a restart..."
-
-ctdb_test_exit
index cad89866b17f9d840f4da6c0448a2c77c36ca56d..c05526cd21af3fc85c96f36bc8c83135dd201d8c 100755 (executable)
@@ -59,5 +59,3 @@ else
     echo "$out"
     testfailures=1
 fi
-
-ctdb_test_exit
index 5c74bc82af0c1e6fdd11f539646054be48d54993..05f49caad865cdaf52c2fcb53ea8b0ea3d8e8de1 100755 (executable)
@@ -38,7 +38,7 @@ getdebug_onnode="$out"
 
 sanity_check_output \
     $num_nodes \
-    '^Node [[:digit:]]+ is at debug level [[:alpha:]]+ \([[:digit:]]\)$' \
+    '^Node [[:digit:]]+ is at debug level [[:alpha:]]+ \([[:digit:]]+\)$' \
     "$out"
 
 try_command_on_node -v 1 "$CTDB getdebug -n all"
@@ -65,7 +65,7 @@ colons=""
 nl="
 "
 while read line ; do
-    t=$(echo "$line" | sed -r -e 's@Node [[:digit:]]+ is at debug level ([[:alpha:]]+) \((-?[[:digit:]])\)$@:\1:\2:@')
+    t=$(echo "$line" | sed -r -e 's@Node [[:digit:]]+ is at debug level ([[:alpha:]]+) \((-?[[:digit:]]+)\)$@:\1:\2:@')
     colons="${colons}${colons:+${nl}}:Name:Level:${nl}${t}"
 done <<<"$getdebug_onnode"
 
@@ -80,5 +80,3 @@ else
     echo "$out"
     testfailures=1
 fi
-
-ctdb_test_exit
index dec19e17ab5350a80ef4a940027552f6cd8422a0..a0e0485778f0c115b69de464bbeeea8559843a4a 100755 (executable)
@@ -47,7 +47,7 @@ get_debug ()
     
     try_command_on_node -v $node "$CTDB getdebug"
     check_debug=$(echo "$out" |
-       sed -r -e 's@Node [[:digit:]] is at debug level ([[:alpha:]]+) \(-?[[:digit:]]\)$@\1@')
+       sed -r -e 's@Node [[:digit:]]+ is at debug level ([[:alpha:]]+) \(-?[[:digit:]]+\)$@\1@')
 }
 
 set_and_check_debug ()
@@ -81,5 +81,3 @@ if [ "$testfailures" != 1 ] ; then
     echo "Returning the debug level to its initial value..."
     set_and_check_debug 1 "$initial_debug"
 fi
-
-ctdb_test_exit
index d92cb41cd6c7764788c30856c108dd8d6724c9d1..257ca4a3ca53e8ec796afada34333592ff26eae0 100755 (executable)
@@ -42,5 +42,3 @@ sanity_check_output 40 "$pattern" "$out"
 try_command_on_node -v 1 "$CTDB statistics -n all"
 
 sanity_check_output 40 "$pattern" "$out"
-
-ctdb_test_exit
index 9de83c011f578d44c2aea362044b3ed95686deff..5df5c07930028ca7abc4696a6d0792579a441818 100755 (executable)
@@ -81,5 +81,3 @@ while [ $n -lt $num_nodes ] ; do
 
     n=$(($n + 1))
 done
-
-ctdb_test_exit
index 634a39aec51ddf165b888e07670291d954aab41a..7eacd121878475c772309c26aebb8dd40a48e82b 100755 (executable)
@@ -114,5 +114,3 @@ else
     echo "BAD: Unable to find IP address to add."
     testfailures=1
 fi
-
-ctdb_test_exit
index bab45ddd50c40f6b5c491ee4e930cbff4abb2a87..6cda8c17f21fc5508e1e0b36b0c52baf508466c0 100755 (executable)
@@ -73,5 +73,3 @@ else
     echo "BAD: The remove IP address is still there!"
     testfailures=1
 fi
-
-ctdb_test_exit
index 009e2a745c6eb3853873d56e591239ebded9c3ef..6e13139f53f3618b29c7ca813fc2d7981357b767 100755 (executable)
@@ -46,7 +46,3 @@ echo "Freezing node $test_node"
 try_command_on_node 0 $CTDB freeze -n $test_node
 
 onnode 0 $CTDB_TEST_WRAPPER wait_until_node_has_status $test_node frozen
-
-echo "GOOD: That worked!"
-
-ctdb_test_exit
index c764205911edff5c3b4bbe7f46924309ae7b26bc..86b139375567ea2e25c0daaced773543f24f733f 100755 (executable)
@@ -53,5 +53,3 @@ echo "That worked!  Now thawing node $test_node"
 try_command_on_node 0 $CTDB thaw -n $test_node
 
 onnode 0 $CTDB_TEST_WRAPPER wait_until_node_has_status $test_node unfrozen
-
-ctdb_test_exit
index 6a55341297d3f188a1b7061df504cad6b71180e5..76c5391f90693987099105f2ea1c6590c6501936 100755 (executable)
@@ -64,7 +64,3 @@ fi
 try_command_on_node -v 0 $CTDB disablemonitor -n $test_node
 
 onnode 0 $CTDB_TEST_WRAPPER wait_until_node_has_status $test_node monoff
-
-echo "GOOD: That worked!"
-
-ctdb_test_exit
index 23ae052f5cbe370c81f9c865e03485830038b59f..f9b31a3254bb6dc973624d8693db2003cf21147b 100755 (executable)
@@ -95,7 +95,3 @@ try_command_on_node -v $test_node rm -v "$trigger"
 sleep_for $monitor_interval
 
 onnode 0 $CTDB_TEST_WRAPPER node_has_status $test_node unhealthy
-
-echo "OK, that all worked.  Expect a restart..."
-
-ctdb_test_exit
index 98fc7e2700e1835cb104cdf2c16a6134777aeecc..3f0b082d5bddf7d60c0cc6e283a4b718ce762e6f 100755 (executable)
@@ -98,7 +98,3 @@ echo "OK: flag file was created so monitoring must be enabled."
 onnode 0 $CTDB_TEST_WRAPPER wait_until_node_has_status $test_node unhealthy $monitor_interval
 
 try_command_on_node -v $test_node ls -l "$detected"
-
-echo "GOOD: That all worked..."
-
-ctdb_test_exit
index ca7fe11fb4c2d0a0f4e6b42656a9f8daedf182ff..a78ab5e182c8e7081ea49fbafe0eefcd7a371824 100755 (executable)
@@ -99,7 +99,3 @@ else
     echo "BAD: IP didn't move to ${to_node}."
     exit 1
 fi
-
-echo "GOOD: That worked..."
-
-ctdb_test_exit
index c621a304ad624dbb41680d7f6afad6f38da4ff36..224cb2a2b2f90825283426b12f2467f1efab8c46 100755 (executable)
@@ -69,7 +69,3 @@ for i in $(seq 1 5) ; do
        exit 1
     fi
 done
-
-echo "GOOD: That worked..."
-
-ctdb_test_exit
index 2b719657ccfde7a637262ea823baf877ff370113..d499599fdfaae46a21fe2dbcefcd0db11d372f7b 100755 (executable)
@@ -50,5 +50,3 @@ else
     echo "BAD: there not look to be output for all $num_nodes nodes"
     exit 1
 fi    
-
-ctdb_test_exit
index 4287cba1fbe4885fa723b651f2d797bf451d2172..fd1e1e6802064ee27eba17e55bd952f89dac7ebd 100755 (executable)
@@ -63,7 +63,3 @@ for i in ip disable enable "ban 0" unban listvars ; do
        exit 1
     fi
 done
-
-echo "OK, that all worked.  Expect a restart..."
-
-ctdb_test_exit
index bba03b14cef047510b6b861a01d07fc956c4196d..98e52f59dd1aa56a762dd6657cf0865046764799 100755 (executable)
@@ -66,7 +66,3 @@ else
     echo "Some IPs didn't move."
     testfailures=1
 fi
-
-echo "Expect a restart..."
-
-ctdb_test_exit
index 7f3da4cd0003390ffd6dde4041d8dac768454809..5e189de37d371c678c4e0af7b4a69a1d2b95e020 100755 (executable)
@@ -85,7 +85,3 @@ else
     echo "Some IPs didn't move."
     testfailures=1
 fi
-
-echo "All done!"
-
-ctdb_test_exit
index e2d36de609e4cd3117fdd8dbd09cf5bed67b41d8..8299588ed8ce52e3bd2283be9377b543d23813a2 100755 (executable)
@@ -96,5 +96,3 @@ else
     echo "Some IPs didn't move."
     testfailures=1
 fi
-
-ctdb_test_exit
index 35085b2a4a2c856dc1138d22b0b73ef36251b8c1..dc3464d194cdd5c608c9210961235327fe2956f8 100755 (executable)
@@ -93,5 +93,3 @@ else
     echo "Some IPs didn't move."
     testfailures=1
 fi
-
-ctdb_test_exit
index 0c9f5c91ed4ebfcc82f0102197c15589b360b192..75c63a772ae0fe466f92d180fb18f2411e23f572 100755 (executable)
@@ -90,6 +90,3 @@ else
     echo "BAD: percentage difference between +ive and -ive ($perc_diff%) > $check_percent%"
     exit 1
 fi
-
-
-ctdb_test_exit
index 6b31a21b557eed6b02a2ffd503251962c814c1d8..fbc49cda6833107379dde766fbe80cf501acd84d 100755 (executable)
@@ -89,5 +89,3 @@ else
     echo "BAD: percentage difference between +ive and -ive ($perc_diff%) > 1%"
     exit 1
 fi
-
-ctdb_test_exit
index 5ea5a471693c323e5e53cbffbaac977427dbada9..9189414c4088f9d15468a1fdfe16f9cbba8256be 100755 (executable)
@@ -37,5 +37,3 @@ t="$CTDB_TEST_WRAPPER $VALGRIND ctdb_transaction --timelimit=30"
 
 echo "Running ctdb_transaction on all $num_nodes nodes."
 try_command_on_node -v -pq all "$t & $t"
-
-ctdb_test_exit
index 26026c9dee0c18cb5ea125f4b5eea5e37b0304da..845d180d8076148c44a6a5a8ee70bf08a1e42102 100755 (executable)
@@ -37,5 +37,3 @@ t="$CTDB_TEST_WRAPPER $VALGRIND ctdb_persistent --timelimit=30"
 
 echo "Running ctdb_persistent on all $num_nodes nodes."
 try_command_on_node -v -pq all "$t & $t"
-
-ctdb_test_exit
index 6bd6835307e7109b4f668ac85626e4ce9e83c7eb..2a7e3abcd1f3f258544546109762f55dbec3db89 100755 (executable)
@@ -37,5 +37,3 @@ t="$CTDB_TEST_WRAPPER $VALGRIND ctdb_persistent --unsafe-writes --timelimit=30"
 
 echo "Running ctdb_persistent --unsafe-writes on all $num_nodes nodes."
 try_command_on_node -v -pq all "$t & $t"
-
-ctdb_test_exit