[ovs-dev] [PATCH 2/2] tests: Test that children restart with special exit code

Ethan Jackson ethan at nicira.com
Fri Sep 24 21:07:20 UTC 2010


Added a test which checks that the python daemon code properly
restarts child processes which exit with RESTART_EXIT_CODE.
---
 tests/daemon-py.at   |   17 +++++++++++++++++
 tests/test-daemon.py |   15 ++++++++++++++-
 2 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/tests/daemon-py.at b/tests/daemon-py.at
index 9e5f279..00f5af3 100644
--- a/tests/daemon-py.at
+++ b/tests/daemon-py.at
@@ -54,6 +54,23 @@ AT_CHECK(
    parent=`cat parent` &&
    test $parentpid = $parent],
   [0], [], [], [kill `cat parent`])
+# HUP the daemon process causing it to throw an exception,
+# and wait for a new child process to get spawned.
+AT_CHECK([cp pid oldpid], [0], [], [], [kill `cat parent`])
+AT_CHECK([kill -HUP `cat pid`], [0], [], [ignore], [kill `cat parent`])
+OVS_WAIT_WHILE([kill -0 `cat oldpid`], [kill `cat parent`])
+OVS_WAIT_UNTIL([test -s pid && test `cat pid` != `cat oldpid`],
+  [kill `cat parent`])
+AT_CHECK([cp pid newpid], [0], [], [], [kill `cat parent`])
+# Check that the pidfile names a running process,
+# and that the parent process of that process is our child process.
+AT_CHECK([ps -o ppid= -p `cat pid` > parentpid],
+  [0], [], [], [kill `cat parent`])
+AT_CHECK(
+  [parentpid=`cat parentpid` &&
+   parent=`cat parent` &&
+   test $parentpid = $parent],
+  [0], [], [], [kill `cat parent`])
 # Kill the daemon process with SIGTERM, and wait for the daemon
 # and the monitor processes to go away and the pidfile to get deleted.
 AT_CHECK([kill `cat pid`], [0], [], [ignore], [kill `cat parent`])
diff --git a/tests/test-daemon.py b/tests/test-daemon.py
index 98a5165..386445d 100644
--- a/tests/test-daemon.py
+++ b/tests/test-daemon.py
@@ -13,13 +13,20 @@
 # limitations under the License.
 
 import getopt
+import signal
 import sys
 import time
 
 import ovs.daemon
 import ovs.util
 
+def handler(signum, frame):
+    raise Exception("Signal handler called with %d" % signum)
+
 def main(argv):
+
+    signal.signal(signal.SIGHUP, handler)
+
     try:
         options, args = getopt.gnu_getopt(
             argv[1:], 'b', ["bail", "help"] + ovs.daemon.LONG_OPTIONS)
@@ -63,4 +70,10 @@ Other options:
     sys.exit(0)
 
 if __name__ == '__main__':
-    main(sys.argv)
+    try:
+        main(sys.argv)
+    except SystemExit:
+        # Let system.exit() calls complete normally
+        raise
+    except:
+        sys.exit(ovs.daemon.RESTART_EXIT_CODE)
-- 
1.7.3





More information about the dev mailing list