]> git.cworth.org Git - empires-server/commitdiff
Add clean handling of Control-C to the test suite
authorCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 15:59:25 +0000 (08:59 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 16:10:26 +0000 (09:10 -0700)
Interrupting the test suite will noe run all cleanup necessary, (such
as terminating the child processes that are still actively listening
to empathy event streams), and will give a (partial) test report of
all tests that have been completed.

This is convenient for when a user doesn't want to wait for the slow
tests to complete, but can still get some good information from
sumarizing the results of all of the fast tests that have already been
performed.

test

diff --git a/test b/test
index 4cdeb895991e6122379b0d412d527997963aa838..48db90d117ca13a295f565984db5dc57c0aed463 100755 (executable)
--- a/test
+++ b/test
@@ -1,5 +1,15 @@
 #!/bin/bash
 
+# Arrange for some cleanup to be executed if the user interrupts the
+# test sutie (for example, by pressing ControlC at the controlling
+# terminal).
+cleanup_and_report() {
+    empathy_deactivate_all >/dev/null 2>&1
+    TEST_REPORT
+    exit $?
+}
+trap cleanup_and_report INT
+
 usage ()
 {
     echo "Usage:$0 <URL-to-test>"
@@ -60,6 +70,7 @@ TEST_END()
 # Print report of all previous test results
 TEST_REPORT()
 {
+    echo ""
     echo ""
     echo "Test Report"
     echo "==========="
@@ -481,6 +492,13 @@ empathy_player_deactivate()
     eval ${player_pid}=""
 }
 
+empathy_deactivate_all()
+{
+    for player in ${empathy_players[*]}; do
+        empathy_player_deactivate $player
+    done
+}
+
 # Pulls a single named event out of the empathy event stream
 #
 # Usage: empathy_get_event <player_name> <event_name>
@@ -866,6 +884,12 @@ result=$(echo $(empathy_scores_names_numbers alice))
 test "$result" = '"alice" 2 "bob" 2 "charlie" 0 "dale" 0 "eric" 0 "fred" 0'
 TEST_END
 
+echo ""
+echo "NOTE: Slow tests ahead!"
+echo "If you are impatient and somehow \"know\" you don't care about the"
+echo "tests below then you can interrupt the test suite with Control-C"
+echo "to get a summary report on the tests that have already been run."
+
 TEST_SUBSECTION "Inactive players don't appear in scores"
 
 TEST "Start 2-player game with 6 registered players"
@@ -899,13 +923,4 @@ result=$(echo $(empathy_scores_names_numbers alice))
 test "$result" = '"alice" 1 "bob" 1 "charlie" 0'
 TEST_END
 
-empathy_deactivate_all()
-{
-    for player in ${empathy_players[*]}; do
-        empathy_player_deactivate $player
-    done
-}
-
-empathy_deactivate_all
-
-TEST_REPORT
+cleanup_and_report