]> git.pond.sub.org Git - empserver/commitdiff
Make smoke test time out instead of hang when server misbehaves
authorMarkus Armbruster <armbru@pond.sub.org>
Mon, 25 Mar 2013 15:58:25 +0000 (16:58 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Wed, 8 May 2013 04:57:55 +0000 (06:57 +0200)
The smoke test waits for the server completing startup by trying to
connect until it works.  Hangs if the server doesn't complete startup
for some reason.  Make it give up after 5s.

Likewise, The smoke test waits for the server to terminate by trying
kill -0 until it fails.  Hangs if the server doesn't terminate.  Make
it give up after 5s.

tests/test-common.sh

index d5cf075eec89554a330314f12b027ea85ecff716..16864564be544cd0e1d867da6dd131df844cc4b5 100644 (file)
@@ -23,22 +23,50 @@ EOF
     cp "$srcdir"/src/lib/global/*.config sandbox/share/empire/builtin
 }
 
+now()
+{
+    # date +%s isn't portable...
+    perl -e 'printf "%s\n", time'
+}
+
 start_server()
 {
+    local pidfile=sandbox/var/empire/server.pid
+    local timeout
     pid=
-    trap 'if [ "$pid" ]; then kill "$pid" 2>/dev/null || true; fi' EXIT
+    trap 'if [ "$pid" ]; then kill -9 "$pid" 2>/dev/null || true; fi' EXIT
     src/server/emp_server -e sandbox/etc/empire/econfig -R 1
+    timeout=$((`now`+5))
+    until pid=`cat $pidfile 2>/dev/null` && [ -n "$pid" ]
+    do
+       if [ `now` -gt $timeout ]
+       then
+           echo "Timed out waiting for server to create $pidfile" >&2
+           exit 1
+       fi
+    done
     while src/client/empire red herring 2>&1 | grep -q "Connection refused"
-    do :              # FIXME hangs here if server crashes on startup
+    do
+       if [ `now` -gt $timeout ]
+       then
+           echo "Timed out waiting for server to accept connections" >&2
+           exit 1
+       fi
     done
-    pid=`cat sandbox/var/empire/server.pid`
 }
 
 stop_server()
 {
+    local timeout
     kill "$pid"
+    timeout=$((`now`+5))
     while kill -0 "$pid" 2>/dev/null
-    do :                   # FIXME hangs here if server fails to exit
+    do
+       if [ `now` -gt $timeout ]
+       then
+           echo "Timed out waiting for server to terminate" >&2
+           exit 1
+       fi
     done
 }