X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Fdaemon.at;h=9cb4d83809b9df9c1baffe619ba3fdc1bacd73b9;hb=c5cf10598f8c9f4428291e9df3ecd72a05fb1ccf;hp=69fff258c314c0afc36948703e4b16323f4d2faa;hpb=37d034580ad38d61f81559a5cd03d11b5468762a;p=sliver-openvswitch.git diff --git a/tests/daemon.at b/tests/daemon.at index 69fff258c..9cb4d8380 100644 --- a/tests/daemon.at +++ b/tests/daemon.at @@ -1,13 +1,12 @@ AT_BANNER([daemon unit tests - C]) AT_SETUP([daemon]) -AT_SKIP_IF([test "$CHECK_LCOV" = true]) # lcov wrapper make pids differ OVSDB_INIT([db]) AT_CAPTURE_FILE([pid]) AT_CAPTURE_FILE([expected]) # Start the daemon and wait for the pidfile to get created # and that its contents are the correct pid. -AT_CHECK([ovsdb-server --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db& echo $! > expected], [0]) +AT_CHECK([ovsdb-server --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db 2>/dev/null & echo $! > expected], [0]) OVS_WAIT_UNTIL([test -s pid], [kill `cat expected`]) AT_CHECK( [pid=`cat pid` && expected=`cat expected` && test "$pid" = "$expected"], @@ -20,14 +19,13 @@ AT_CHECK([test ! -e pid]) AT_CLEANUP AT_SETUP([daemon --monitor]) -AT_SKIP_IF([test "$CHECK_LCOV" = true]) # lcov wrapper make pids differ OVSDB_INIT([db]) AT_CAPTURE_FILE([pid]) AT_CAPTURE_FILE([parent]) AT_CAPTURE_FILE([parentpid]) AT_CAPTURE_FILE([newpid]) # Start the daemon and wait for the pidfile to get created. -AT_CHECK([ovsdb-server --monitor --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db& echo $! > parent], [0]) +AT_CHECK([ovsdb-server --monitor --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db 2>/dev/null & echo $! > parent], [0]) OVS_WAIT_UNTIL([test -s pid], [kill `cat parent`]) # Check that the pidfile names a running process, # and that the parent process of that process is our child process. @@ -39,6 +37,11 @@ AT_CHECK( parent=`cat parent` && test $parentpid = $parent], [0], [], [], [kill `cat parent`]) +# Avoid a race between pidfile creation and notifying the parent, +# which can easily trigger if ovsdb-server is slow (e.g. due to valgrind). +OVS_WAIT_UNTIL( + [ovs-appctl --timeout=10 -t "`pwd`/unixctl" version], + [kill `cat pid`]) # Kill the daemon process, making it look like a segfault, # and wait for a new child process to get spawned. AT_CHECK([cp pid oldpid], [0], [], [], [kill `cat parent`]) @@ -64,13 +67,12 @@ OVS_WAIT_WHILE([kill -0 `cat parent` || kill -0 `cat newpid` || test -e pid], AT_CLEANUP AT_SETUP([daemon --detach]) -AT_SKIP_IF([test "$CHECK_LCOV" = true]) # lcov wrapper make pids differ AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) # Start the daemon and make sure that the pidfile exists immediately. # We don't wait for the pidfile to get created because the daemon is # supposed to do so before the parent exits. -AT_CHECK([ovsdb-server --detach --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0]) +AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0]) AT_CHECK([test -s pid]) AT_CHECK([kill -0 `cat pid`]) # Kill the daemon and make sure that the pidfile gets deleted. @@ -81,7 +83,6 @@ AT_CHECK([test ! -e pid]) AT_CLEANUP AT_SETUP([daemon --detach --monitor]) -AT_SKIP_IF([test "$CHECK_LCOV" = true]) # lcov wrapper make pids differ m4_define([CHECK], [AT_CHECK([$1], [$2], [$3], [$4], [kill `cat daemon monitor`])]) OVSDB_INIT([db]) @@ -94,7 +95,7 @@ AT_CAPTURE_FILE([init]) # Start the daemon and make sure that the pidfile exists immediately. # We don't wait for the pidfile to get created because the daemon is # supposed to do so before the parent exits. -AT_CHECK([ovsdb-server --detach --pidfile="`pwd`"/daemon --monitor --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0]) +AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/daemon --monitor --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0]) AT_CHECK([test -s daemon]) # Check that the pidfile names a running process, # and that the parent process of that process is a running process, @@ -103,7 +104,7 @@ CHECK([kill -0 `cat daemon`]) CHECK([ps -o ppid= -p `cat daemon` > monitor]) CHECK([kill -0 `cat monitor`]) CHECK([ps -o ppid= -p `cat monitor` > init]) -CHECK([test `cat init` = 1]) +CHECK([test `cat init` != $$]) # Kill the daemon process, making it look like a segfault, # and wait for a new daemon process to get spawned. CHECK([cp daemon olddaemon]) @@ -120,7 +121,7 @@ CHECK([ps -o ppid= -p `cat daemon` > newmonitor]) CHECK([diff monitor newmonitor]) CHECK([kill -0 `cat newmonitor`]) CHECK([ps -o ppid= -p `cat newmonitor` > init]) -CHECK([test `cat init` = 1]) +CHECK([test `cat init` != $$]) # Kill the daemon process with SIGTERM, and wait for the daemon # and the monitor processes to go away and the pidfile to get deleted. CHECK([kill `cat daemon`], [0], [], [ignore]) @@ -133,7 +134,7 @@ AT_CLEANUP AT_SETUP([daemon --detach startup errors]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) -AT_CHECK([ovsdb-server --detach --pidfile="`pwd`"/pid --unixctl="`pwd`"/nonexistent/unixctl db], [1], [], [stderr]) +AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --unixctl="`pwd`"/nonexistent/unixctl db], [1], [], [stderr]) AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], [0], [ignore], []) AT_CHECK([test ! -s pid]) @@ -142,54 +143,8 @@ AT_CLEANUP AT_SETUP([daemon --detach --monitor startup errors]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) -AT_CHECK([ovsdb-server --detach --pidfile="`pwd`"/pid --monitor --unixctl="`pwd`"/nonexistent/unixctl db], [1], [], [stderr]) +AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --monitor --unixctl="`pwd`"/nonexistent/unixctl db], [1], [], [stderr]) AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], [0], [ignore], []) AT_CHECK([test ! -s pid]) AT_CLEANUP - -# xxx This test hangs frequently, which often prevents builds from -# xxx completing. Skip this test until we have time to debug it. -AT_SETUP([daemon --detach closes standard fds]) -AT_SKIP_IF([:]) -AT_CAPTURE_FILE([pid]) -AT_CAPTURE_FILE([status]) -AT_CAPTURE_FILE([stderr]) -OVSDB_INIT([db]) -AT_CHECK([(yes 2>stderr; echo $? > status) | ovsdb-server --detach --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl db], [0], [], []) -AT_CHECK([kill `cat pid`]) -AT_CHECK([test -s status]) -if grep '[[bB]]roken pipe' stderr >/dev/null 2>&1; then - # Something in the environment caused SIGPIPE to be ignored, but - # 'yes' at least told us that it got EPIPE. Good enough; we know - # that stdout was closed. - : -else - # Otherwise make sure that 'yes' died from SIGPIPE. - AT_CHECK([kill -l `cat status`], [0], [PIPE -]) -fi -AT_CLEANUP - -# xxx This test hangs frequently, which often prevents builds from -# xxx completing. Skip this test until we have time to debug it. -AT_SETUP([daemon --detach --monitor closes standard fds]) -AT_SKIP_IF([:]) -AT_CAPTURE_FILE([pid]) -AT_CAPTURE_FILE([status]) -AT_CAPTURE_FILE([stderr]) -OVSDB_INIT([db]) -AT_CHECK([(yes 2>stderr; echo $? > status) | ovsdb-server --detach --monitor --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl db], [0], [], []) -AT_CHECK([kill `cat pid`]) -AT_CHECK([test -s status]) -if grep '[[bB]]roken pipe' stderr >/dev/null 2>&1; then - # Something in the environment caused SIGPIPE to be ignored, but - # 'yes' at least told us that it got EPIPE. Good enough; we know - # that stdout was closed. - : -else - # Otherwise make sure that 'yes' died from SIGPIPE. - AT_CHECK([kill -l `cat status`], [0], [PIPE -]) -fi -AT_CLEANUP