From: Amitay Isaacs Date: Fri, 4 May 2018 08:08:08 +0000 (+1000) Subject: ctdb-event: Add tests for event daemon X-Git-Tag: tevent-0.9.37~102 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6eaef8491e4dbef2d5e7467e9e7dc40a971ec84a;p=thirdparty%2Fsamba.git ctdb-event: Add tests for event daemon Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- diff --git a/ctdb/tests/eventd/README b/ctdb/tests/eventd/README new file mode 100644 index 00000000000..742b2c5cc82 --- /dev/null +++ b/ctdb/tests/eventd/README @@ -0,0 +1 @@ +Unit tests for event daemon diff --git a/ctdb/tests/eventd/etc-ctdb/ctdb.conf b/ctdb/tests/eventd/etc-ctdb/ctdb.conf new file mode 100644 index 00000000000..59bc9bbd362 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/ctdb.conf @@ -0,0 +1,6 @@ +[logging] + location = file: + log level = DEBUG + +[event] + debug script = debug-script.sh diff --git a/ctdb/tests/eventd/etc-ctdb/debug-script.sh b/ctdb/tests/eventd/etc-ctdb/debug-script.sh new file mode 100755 index 00000000000..04618cf92f8 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/debug-script.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +log="${CTDB_BASE}/debug_script.log" + +case "$2" in +"timeout") + echo "args: $*" > "$log" + ;; + +"verbosetimeout") + (pstree -p -a $1 ; ctdb-event status random $2) > "$log" + ;; + +"verbosetimeout2") + exec > "$log" 2>&1 + ctdb-event status random $2 + ;; + +*) + ;; + +esac diff --git a/ctdb/tests/eventd/etc-ctdb/events/empty/README b/ctdb/tests/eventd/etc-ctdb/events/empty/README new file mode 100644 index 00000000000..a5614a9838c --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/empty/README @@ -0,0 +1 @@ +empty event scripts directory diff --git a/ctdb/tests/eventd/etc-ctdb/events/multi/01.test.script b/ctdb/tests/eventd/etc-ctdb/events/multi/01.test.script new file mode 100755 index 00000000000..d16f0dec613 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/multi/01.test.script @@ -0,0 +1,11 @@ +#!/bin/sh + +case "$1" in +"startup") sleep 5; exit 0 ;; +"monitor") sleep 5; exit 0 ;; +"event1") sleep 1; exit 0 ;; +"event2") sleep 1; exit 0 ;; +"event3") exit 3 ;; +"timeout1") sleep 99 ;; +*) exit 0 ;; +esac diff --git a/ctdb/tests/eventd/etc-ctdb/events/multi/02.test.script b/ctdb/tests/eventd/etc-ctdb/events/multi/02.test.script new file mode 100755 index 00000000000..5c841aa3c8e --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/multi/02.test.script @@ -0,0 +1,9 @@ +#!/bin/sh + +case "$1" in +"monitor") sleep 1; exit 0 ;; +"event1") exit 1 ;; +"event2") sleep 1; exit 0 ;; +"timeout2") sleep 99 ;; +*) exit 0 ;; +esac diff --git a/ctdb/tests/eventd/etc-ctdb/events/multi/03.test.script b/ctdb/tests/eventd/etc-ctdb/events/multi/03.test.script new file mode 100755 index 00000000000..b48b68c1d34 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/multi/03.test.script @@ -0,0 +1,9 @@ +#!/bin/sh + +case "$1" in +"monitor") sleep 1; exit 0 ;; +"event1") sleep 1; exit 0 ;; +"event2") exit 2 ;; +"timeout3") sleep 99 ;; +*) exit 0 ;; +esac diff --git a/ctdb/tests/eventd/etc-ctdb/events/random/01.disabled.script b/ctdb/tests/eventd/etc-ctdb/events/random/01.disabled.script new file mode 100644 index 00000000000..c52d3c26b35 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/random/01.disabled.script @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 0 diff --git a/ctdb/tests/eventd/etc-ctdb/events/random/02.enabled.script b/ctdb/tests/eventd/etc-ctdb/events/random/02.enabled.script new file mode 100755 index 00000000000..f25e7242543 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/random/02.enabled.script @@ -0,0 +1,12 @@ +#!/bin/sh + +case "$1" in +"monitor") exit 0 ;; +"failure") exit 1 ;; +"timeout") sleep 99 ;; +"verbose") echo "Running event $1" ; exit 0 ;; +"verbosefailure") echo "args: $*"; exit 1 ;; +"verbosetimeout") echo "Sleeping for 99 seconds"; sleep 99 ;; +"verbosetimeout2") echo "Sleeping for 99 seconds"; sleep 99 ;; +*) exit 0 ;; +esac diff --git a/ctdb/tests/eventd/etc-ctdb/events/random/README.script b/ctdb/tests/eventd/etc-ctdb/events/random/README.script new file mode 100644 index 00000000000..9086add3eea --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/random/README.script @@ -0,0 +1 @@ +Random collection of files and event scripts diff --git a/ctdb/tests/eventd/etc-ctdb/events/random/a.script b/ctdb/tests/eventd/etc-ctdb/events/random/a.script new file mode 100755 index 00000000000..2bb8d868bd0 --- /dev/null +++ b/ctdb/tests/eventd/etc-ctdb/events/random/a.script @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 1 diff --git a/ctdb/tests/eventd/eventd_001.sh b/ctdb/tests/eventd/eventd_001.sh new file mode 100755 index 00000000000..106f6b8e75c --- /dev/null +++ b/ctdb/tests/eventd/eventd_001.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "non-existent eventscript directory" + +setup_eventd + +required_result 2 </dev/null || echo) + if [ -n "$pid" ] ; then + kill $pid || true + fi +} + +setup_eventd () +{ + echo "Setting up eventd" + + $VALGRIND ctdb-eventd 2>&1 | tee "$eventd_logfile" & + # Wait till eventd is running + wait_until 10 test -S "$eventd_socket" || \ + die "ctdb_eventd failed to start" + + test_cleanup cleanup_eventd +} + +simple_test_background () +{ + background_log="${CTDB_BASE}/background.log" + background_status="${CTDB_BASE}/background.status" + background_running=1 + + ( + (unit_test ctdb-event "$@") > "$background_log" 2>&1 + echo $? > "$background_status" + ) & + background_pid=$! +} + +background_wait () +{ + [ -n "$background_running" ] || return + + count=0 + while [ ! -s "$background_status" -a $count -lt 30 ] ; do + count=$(( $count + 1 )) + sleep 1 + done + + if [ ! -s "$background_status" ] ; then + kill -9 "$background_pid" + echo TIMEOUT > "$background_status" + fi +} + +background_output () +{ + [ -n "$background_running" ] || return + + bg_status=$(cat "$background_status") + rm -f "$background_status" + echo "--- Background ---" + if [ "$bg_status" = "TIMEOUT" ] ; then + echo "Background process did not complete" + bg_status=1 + else + cat "$background_log" + rm -f "$background_log" + fi + echo "--- Background ---" + unset background_running + [ $bg_status -eq 0 ] || exit $bg_status +} + +simple_test () +{ + (unit_test ctdb-event "$@") + status=$? + + background_wait + background_output + + [ $status -eq 0 ] || exit $status +} + +result_filter () +{ + _duration="\<[0-9][0-9]*\.[0-9][0-9][0-9]\>" + _day="\(Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Sun\)" + _month="\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)" + _date="\( [0-9]\|[0-9][0-9]\)" + _time="[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" + _year="[0-9][0-9][0-9][0-9]" + _datetime="${_day} ${_month} ${_date} ${_time} ${_year}" + _pid="[0-9][0-9]*" + sed -e "s#${_duration}#DURATION#" \ + -e "s#${_datetime}#DATETIME#" \ + -e "s#,${_pid}#,PID#" \ + -e "s#\[${_pid}\]#[PID]#" +} diff --git a/ctdb/tests/run_tests.sh b/ctdb/tests/run_tests.sh index c5556279744..0dc9313b8d5 100755 --- a/ctdb/tests/run_tests.sh +++ b/ctdb/tests/run_tests.sh @@ -263,6 +263,7 @@ export TEST_SCRIPTS_DIR="${CTDB_TEST_DIR}/scripts" unit_tests=" ctdb_eventd cunit + eventd eventscripts onnode shellcheck diff --git a/ctdb/wscript b/ctdb/wscript index e12da085d90..7c5f89b0a04 100644 --- a/ctdb/wscript +++ b/ctdb/wscript @@ -987,6 +987,7 @@ def build(bld): 'complex', 'ctdb_eventd', 'cunit', + 'eventd', 'eventscripts', 'onnode', 'shellcheck',