ctdb-event: Add tests for event daemon
authorAmitay Isaacs <amitay@gmail.com>
Fri, 4 May 2018 08:08:08 +0000 (18:08 +1000)
committerMartin Schwenke <martins@samba.org>
Thu, 5 Jul 2018 04:52:43 +0000 (06:52 +0200)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
39 files changed:
ctdb/tests/eventd/README [new file with mode: 0644]
ctdb/tests/eventd/etc-ctdb/ctdb.conf [new file with mode: 0644]
ctdb/tests/eventd/etc-ctdb/debug-script.sh [new file with mode: 0755]
ctdb/tests/eventd/etc-ctdb/events/empty/README [new file with mode: 0644]
ctdb/tests/eventd/etc-ctdb/events/multi/01.test.script [new file with mode: 0755]
ctdb/tests/eventd/etc-ctdb/events/multi/02.test.script [new file with mode: 0755]
ctdb/tests/eventd/etc-ctdb/events/multi/03.test.script [new file with mode: 0755]
ctdb/tests/eventd/etc-ctdb/events/random/01.disabled.script [new file with mode: 0644]
ctdb/tests/eventd/etc-ctdb/events/random/02.enabled.script [new file with mode: 0755]
ctdb/tests/eventd/etc-ctdb/events/random/README.script [new file with mode: 0644]
ctdb/tests/eventd/etc-ctdb/events/random/a.script [new file with mode: 0755]
ctdb/tests/eventd/eventd_001.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_002.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_003.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_004.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_005.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_006.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_007.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_008.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_011.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_012.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_013.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_014.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_021.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_022.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_023.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_024.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_031.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_032.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_033.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_041.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_042.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_043.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_044.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_051.sh [new file with mode: 0755]
ctdb/tests/eventd/eventd_052.sh [new file with mode: 0755]
ctdb/tests/eventd/scripts/local.sh [new file with mode: 0644]
ctdb/tests/run_tests.sh
ctdb/wscript

diff --git a/ctdb/tests/eventd/README b/ctdb/tests/eventd/README
new file mode 100644 (file)
index 0000000..742b2c5
--- /dev/null
@@ -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 (file)
index 0000000..59bc9bb
--- /dev/null
@@ -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 (executable)
index 0000000..04618cf
--- /dev/null
@@ -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 (file)
index 0000000..a5614a9
--- /dev/null
@@ -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 (executable)
index 0000000..d16f0de
--- /dev/null
@@ -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 (executable)
index 0000000..5c841aa
--- /dev/null
@@ -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 (executable)
index 0000000..b48b68c
--- /dev/null
@@ -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 (file)
index 0000000..c52d3c2
--- /dev/null
@@ -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 (executable)
index 0000000..f25e724
--- /dev/null
@@ -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 (file)
index 0000000..9086add
--- /dev/null
@@ -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 (executable)
index 0000000..2bb8d86
--- /dev/null
@@ -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 (executable)
index 0000000..106f6b8
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "non-existent eventscript directory"
+
+setup_eventd
+
+required_result 2 <<EOF
+Event dir for foobar does not exist
+EOF
+simple_test status foobar monitor
+
+required_result 2 <<EOF
+Event dir for foobar does not exist
+EOF
+simple_test run 10 foobar monitor
+
+required_result 2 <<EOF
+Script 01.test does not exist in foobar
+EOF
+simple_test script enable foobar 01.test
diff --git a/ctdb/tests/eventd/eventd_002.sh b/ctdb/tests/eventd/eventd_002.sh
new file mode 100755 (executable)
index 0000000..b5fd2df
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "empty eventscript directory"
+
+setup_eventd
+
+required_result 22 <<EOF
+Event monitor has never run in empty
+EOF
+simple_test status empty monitor
+
+ok <<EOF
+EOF
+simple_test run 10 empty monitor
+
+ok <<EOF
+EOF
+simple_test status empty monitor
+
diff --git a/ctdb/tests/eventd/eventd_003.sh b/ctdb/tests/eventd/eventd_003.sh
new file mode 100755 (executable)
index 0000000..e138eb1
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "eventscript directory with random files"
+
+setup_eventd
+
+required_result 22 <<EOF
+Script README is invalid in random
+EOF
+simple_test script enable random README
+
+required_result 22 <<EOF
+Script a is invalid in random
+EOF
+simple_test script disable random a
+
+required_result 2 <<EOF
+Script 00.foobar does not exist in random
+EOF
+simple_test script enable random 00.foobar
+
+required_result 22 <<EOF
+Event monitor has never run in random
+EOF
+simple_test status random monitor
+
+ok <<EOF
+EOF
+simple_test run 10 random monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
diff --git a/ctdb/tests/eventd/eventd_004.sh b/ctdb/tests/eventd/eventd_004.sh
new file mode 100755 (executable)
index 0000000..3a7163f
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "disabled event script"
+
+setup_eventd
+
+ok_null
+simple_test script disable random 01.disabled
+
+ok_null
+simple_test script disable random 01.disabled
+
+ok_null
+simple_test script enable random 01.disabled
+
+ok_null
+simple_test script disable random 01.disabled
+
+required_result 22 <<EOF
+Event monitor has never run in random
+EOF
+simple_test status random monitor
+
+ok_null
+simple_test run 10 random monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
diff --git a/ctdb/tests/eventd/eventd_005.sh b/ctdb/tests/eventd/eventd_005.sh
new file mode 100755 (executable)
index 0000000..28f4935
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "enabled event script"
+
+setup_eventd
+
+ok_null
+simple_test script enable random 02.enabled
+
+ok_null
+simple_test script enable random 02.enabled
+
+ok_null
+simple_test run 10 random monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
+
+ok_null
+simple_test script enable random 01.disabled
+
+ok_null
+simple_test run 10 random monitor
+
+ok <<EOF
+01.disabled          OK         DURATION DATETIME
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
diff --git a/ctdb/tests/eventd/eventd_006.sh b/ctdb/tests/eventd/eventd_006.sh
new file mode 100755 (executable)
index 0000000..5d21a15
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "failing event script"
+
+setup_eventd
+
+required_result 8 <<EOF
+Event failure in random failed
+EOF
+simple_test run 10 random failure
+
+required_result 1 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status random failure
diff --git a/ctdb/tests/eventd/eventd_007.sh b/ctdb/tests/eventd/eventd_007.sh
new file mode 100755 (executable)
index 0000000..9fa0d42
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "timing out event script"
+
+setup_eventd
+
+required_result 62 <<EOF
+Event timeout in random timed out
+EOF
+simple_test run 5 random timeout
+
+required_result 62 <<EOF
+01.disabled          DISABLED  
+02.enabled           TIMEDOUT   DATETIME
+  OUTPUT: 
+EOF
+simple_test status random timeout
diff --git a/ctdb/tests/eventd/eventd_008.sh b/ctdb/tests/eventd/eventd_008.sh
new file mode 100755 (executable)
index 0000000..c394f61
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "capture event script output"
+
+setup_eventd
+
+required_result 8 <<EOF
+Event verbosefailure in random failed
+EOF
+simple_test run 10 random verbosefailure with some args
+
+required_result 1 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: args: verbosefailure with some args
+EOF
+simple_test status random verbosefailure
diff --git a/ctdb/tests/eventd/eventd_011.sh b/ctdb/tests/eventd/eventd_011.sh
new file mode 100755 (executable)
index 0000000..8d90e2c
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "multiple events"
+
+setup_eventd
+
+ok_null
+simple_test run 10 random monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
+
+required_result 8 <<EOF
+Event failure in random failed
+EOF
+simple_test run 10 random failure
+
+required_result 1 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status random failure
+
+required_result 8 <<EOF
+Event verbosefailure in random failed
+EOF
+simple_test run 10 random verbosefailure
+
+required_result 1 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: args: verbosefailure
+EOF
+simple_test status random verbosefailure
diff --git a/ctdb/tests/eventd/eventd_012.sh b/ctdb/tests/eventd/eventd_012.sh
new file mode 100755 (executable)
index 0000000..fd828c4
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "cancel new monitor event"
+
+setup_eventd
+
+ok_null
+simple_test_background run 10 multi startup
+
+required_result 125 <<EOF
+Event monitor in multi got cancelled
+EOF
+simple_test run 10 multi monitor
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi startup
+
+required_result 22 <<EOF
+Event monitor has never run in multi
+EOF
+simple_test status multi monitor
diff --git a/ctdb/tests/eventd/eventd_013.sh b/ctdb/tests/eventd/eventd_013.sh
new file mode 100755 (executable)
index 0000000..14afd0c
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "cancel running monitor event"
+
+setup_eventd
+
+required_result 125 <<EOF
+Event monitor in multi got cancelled
+EOF
+simple_test_background run 10 multi monitor
+
+ok_null
+simple_test run 10 multi startup
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi startup
+
+required_result 22 <<EOF
+Event monitor has never run in multi
+EOF
+simple_test status multi monitor
diff --git a/ctdb/tests/eventd/eventd_014.sh b/ctdb/tests/eventd/eventd_014.sh
new file mode 100755 (executable)
index 0000000..63b34b4
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "queue events"
+
+setup_eventd
+
+ok_null
+simple_test_background run 10 multi queue1
+
+ok_null
+simple_test run 10 multi queue2
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi queue1
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi queue2
diff --git a/ctdb/tests/eventd/eventd_021.sh b/ctdb/tests/eventd/eventd_021.sh
new file mode 100755 (executable)
index 0000000..c39afa9
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "debug script"
+
+setup_eventd
+
+result_filter ()
+{
+       _pid="[0-9][0-9]*"
+       sed -e "s| ${_pid}| PID|"
+}
+
+required_result 62 <<EOF
+Event timeout in random timed out
+EOF
+simple_test run 5 random timeout
+
+# wait for debug hung script
+sleep 5
+
+ok <<EOF
+args: PID timeout
+EOF
+unit_test cat "${CTDB_BASE}/debug_script.log"
diff --git a/ctdb/tests/eventd/eventd_022.sh b/ctdb/tests/eventd/eventd_022.sh
new file mode 100755 (executable)
index 0000000..b71f7c3
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "status output in debug script"
+
+setup_eventd
+
+required_result 62 <<EOF
+Event verbosetimeout in random timed out
+EOF
+simple_test run 5 random verbosetimeout
+
+# wait for debug hung script
+sleep 5
+
+ok <<EOF
+02.enabled.scri,PID $eventd_scriptdir/random/02.enabled.script verbosetimeout
+  \`-sleep,PID 99
+01.disabled          DISABLED  
+02.enabled           TIMEDOUT   DATETIME
+  OUTPUT: Sleeping for 99 seconds
+EOF
+unit_test cat "${CTDB_BASE}/debug_script.log"
diff --git a/ctdb/tests/eventd/eventd_023.sh b/ctdb/tests/eventd/eventd_023.sh
new file mode 100755 (executable)
index 0000000..3d86aab
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "redirected status output in debug script"
+
+setup_eventd
+
+required_result 62 <<EOF
+Event verbosetimeout2 in random timed out
+EOF
+simple_test run 5 random verbosetimeout2
+
+# wait for debug hung script
+sleep 5
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           TIMEDOUT   DATETIME
+  OUTPUT: Sleeping for 99 seconds
+EOF
+unit_test cat "${CTDB_BASE}/debug_script.log"
diff --git a/ctdb/tests/eventd/eventd_024.sh b/ctdb/tests/eventd/eventd_024.sh
new file mode 100755 (executable)
index 0000000..a76681e
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "process terminated after debug"
+
+setup_eventd
+
+result_filter()
+{
+       _pid="[0-9][0-9]*"
+       sed -e "s|${_pid}|PID|"
+}
+
+required_result 62 <<EOF
+Event timeout in random timed out
+EOF
+simple_test run 5 random timeout
+
+# wait for debug hung script
+sleep 5
+
+ok <<EOF
+args: PID timeout
+EOF
+unit_test cat "${CTDB_BASE}/debug_script.log"
+
+pid=$(cat "${CTDB_BASE}/debug_script.log" | awk '{print $2}')
+
+ok_null
+unit_test pstree -p -a "$pid"
diff --git a/ctdb/tests/eventd/eventd_031.sh b/ctdb/tests/eventd/eventd_031.sh
new file mode 100755 (executable)
index 0000000..07efa80
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "multiple scripts"
+
+setup_eventd
+
+ok_null
+simple_test run 30 multi monitor
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi monitor
diff --git a/ctdb/tests/eventd/eventd_032.sh b/ctdb/tests/eventd/eventd_032.sh
new file mode 100755 (executable)
index 0000000..e8cb4f8
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "failures with multiple scripts"
+
+setup_eventd
+
+required_result 8 <<EOF
+Event event1 in multi failed
+EOF
+simple_test run 10 multi event1
+
+required_result 1 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi event1
+
+required_result 8 <<EOF
+Event event2 in multi failed
+EOF
+simple_test run 10 multi event2
+
+required_result 2 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi event2
+
+required_result 8 <<EOF
+Event event3 in multi failed
+EOF
+simple_test run 10 multi event3
+
+required_result 3 <<EOF
+01.test              ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi event3
diff --git a/ctdb/tests/eventd/eventd_033.sh b/ctdb/tests/eventd/eventd_033.sh
new file mode 100755 (executable)
index 0000000..368bd58
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "timeouts with multiple scripts"
+
+setup_eventd
+
+required_result 62 <<EOF
+Event timeout1 in multi timed out
+EOF
+simple_test run 5 multi timeout1
+
+required_result 62 <<EOF
+01.test              TIMEDOUT   DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi timeout1
+
+required_result 62 <<EOF
+Event timeout2 in multi timed out
+EOF
+simple_test run 5 multi timeout2
+
+required_result 62 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              TIMEDOUT   DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi timeout2
+
+required_result 62 <<EOF
+Event timeout3 in multi timed out
+EOF
+simple_test run 5 multi timeout3
+
+required_result 62 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              TIMEDOUT   DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi timeout3
diff --git a/ctdb/tests/eventd/eventd_041.sh b/ctdb/tests/eventd/eventd_041.sh
new file mode 100755 (executable)
index 0000000..ca4a99c
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "multiple components"
+
+setup_eventd
+
+ok_null
+simple_test_background run 10 multi monitor
+
+ok_null
+simple_test run 10 random monitor
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+EOF
+simple_test status random monitor
diff --git a/ctdb/tests/eventd/eventd_042.sh b/ctdb/tests/eventd/eventd_042.sh
new file mode 100755 (executable)
index 0000000..7b53739
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "multiple components with failure"
+
+setup_eventd
+
+ok_null
+simple_test_background run 10 multi monitor
+
+required_result 8 <<EOF
+Event failure in random failed
+EOF
+simple_test run 10 random failure
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi monitor
+
+required_result 1 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status random failure
diff --git a/ctdb/tests/eventd/eventd_043.sh b/ctdb/tests/eventd/eventd_043.sh
new file mode 100755 (executable)
index 0000000..acf4775
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "multiple components with timeout"
+
+setup_eventd
+
+ok_null
+simple_test_background run 10 multi monitor
+
+required_result 62 <<EOF
+Event timeout in random timed out
+EOF
+simple_test run 10 random timeout
+
+ok <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi monitor
+
+required_result 62 <<EOF
+01.disabled          DISABLED  
+02.enabled           TIMEDOUT   DATETIME
+  OUTPUT: 
+EOF
+simple_test status random timeout
diff --git a/ctdb/tests/eventd/eventd_044.sh b/ctdb/tests/eventd/eventd_044.sh
new file mode 100755 (executable)
index 0000000..8c0e931
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "new component"
+
+setup_eventd
+
+ok_null
+mkdir  "${eventd_scriptdir}/foobar"
+
+ok_null
+cp "${eventd_scriptdir}/random/01.disabled.script" "${eventd_scriptdir}/foobar"
+
+required_result 22 <<EOF
+Event monitor has never run in foobar
+EOF
+simple_test status foobar monitor
+
+ok_null
+simple_test run 10 foobar monitor
+
+ok <<EOF
+01.disabled          DISABLED  
+EOF
+simple_test status foobar monitor
+
+ok_null
+simple_test script enable foobar 01.disabled
+
+ok_null
+simple_test run 10 foobar monitor
+
+ok <<EOF
+01.disabled          OK         DURATION DATETIME
+EOF
+simple_test status foobar monitor
diff --git a/ctdb/tests/eventd/eventd_051.sh b/ctdb/tests/eventd/eventd_051.sh
new file mode 100755 (executable)
index 0000000..2932b16
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "logging check"
+
+setup_eventd
+
+ok_null
+simple_test run 10 random verbose
+
+ok <<EOF
+ctdb-eventd[PID]: 02.enabled: Running event verbose
+EOF
+unit_test grep "02.enabled:" "$eventd_logfile"
diff --git a/ctdb/tests/eventd/eventd_052.sh b/ctdb/tests/eventd/eventd_052.sh
new file mode 100755 (executable)
index 0000000..6d99d51
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "run through failure"
+
+setup_eventd
+
+export CTDB_EVENT_RUN_ALL=1
+
+required_result 8 <<EOF
+Event event1 in multi failed
+EOF
+simple_test run 10 multi event1
+
+required_result 1 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              ERROR      DURATION DATETIME
+  OUTPUT: 
+03.test              OK         DURATION DATETIME
+EOF
+simple_test status multi event1
+
+required_result 8 <<EOF
+Event event2 in multi failed
+EOF
+simple_test run 10 multi event2
+
+required_result 2 <<EOF
+01.test              OK         DURATION DATETIME
+02.test              OK         DURATION DATETIME
+03.test              ERROR      DURATION DATETIME
+  OUTPUT: 
+EOF
+simple_test status multi event2
diff --git a/ctdb/tests/eventd/scripts/local.sh b/ctdb/tests/eventd/scripts/local.sh
new file mode 100644 (file)
index 0000000..524420f
--- /dev/null
@@ -0,0 +1,123 @@
+# Hey Emacs, this is a -*- shell-script -*- !!!  :-)
+
+. "${TEST_SCRIPTS_DIR}/script_install_paths.sh"
+
+PATH="$PATH:$CTDB_SCRIPTS_TOOLS_HELPER_DIR"
+
+if "$TEST_VERBOSE" ; then
+    debug () { echo "$@" ; }
+else
+    debug () { : ; }
+fi
+
+setup_ctdb_base "${TEST_VAR_DIR}" "eventd"
+
+ctdb_config=$(ctdb-path config)
+eventd_socket=$(ctdb-path socket eventd)
+eventd_pidfile=$(ctdb-path pidfile eventd)
+eventd_scriptdir=$(ctdb-path etcdir append events)
+eventd_logfile="${CTDB_BASE}/eventd.log"
+
+define_test ()
+{
+    _f=$(basename "$0" ".sh")
+
+    printf "%-28s - %s\n" "$_f" "$1"
+}
+
+cleanup_eventd ()
+{
+       debug "Cleaning up eventd"
+
+       pid=$(cat "$eventd_pidfile" 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]#"
+}
index c5556279744f43323af99ad1e5c7b14acdefebfd..0dc9313b8d504c2d76b37caaeec351a284308949 100755 (executable)
@@ -263,6 +263,7 @@ export TEST_SCRIPTS_DIR="${CTDB_TEST_DIR}/scripts"
 unit_tests="
        ctdb_eventd
        cunit
+       eventd
        eventscripts
        onnode
        shellcheck
index e12da085d902e9eece2da2f3d42c5d327b01a820..7c5f89b0a04789fd211628142a509816479a7437 100644 (file)
@@ -987,6 +987,7 @@ def build(bld):
         'complex',
         'ctdb_eventd',
         'cunit',
+        'eventd',
         'eventscripts',
         'onnode',
         'shellcheck',