[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