From: Russell Bryant Date: Fri, 18 Dec 2015 18:24:57 +0000 (-0500) Subject: daemon-py.at: Run tests with Python 2 and 3. X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=cede00f2ce2f0b1ba375a48f02a211d05823b052 daemon-py.at: Run tests with Python 2 and 3. Update these Python tests to run with both Python 2 and 3. Signed-off-by: Russell Bryant Acked-by: Ben Pfaff --- diff --git a/tests/daemon-py.at b/tests/daemon-py.at index cafa8dfe2..e59c11d4b 100644 --- a/tests/daemon-py.at +++ b/tests/daemon-py.at @@ -1,229 +1,266 @@ AT_BANNER([daemon unit tests - Python]) -AT_SETUP([daemon - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -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([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid& echo $! > expected], [0]) -OVS_WAIT_UNTIL([test -s pid], [kill `cat expected`]) -AT_CHECK( - [pid=`cat pid` && expected=`cat expected` && test "$pid" = "$expected"], - [0], [], [], [kill `cat expected`]) -AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat expected`]) -# Kill the daemon and make sure that the pidfile gets deleted. -kill `cat expected` -OVS_WAIT_WHILE([kill -0 `cat expected`]) -AT_CHECK([test ! -e pid]) -AT_CLEANUP - -AT_SETUP([daemon --monitor - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -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([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --monitor& 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. -AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat parent`]) -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, 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`]) -AT_CHECK([kill -SEGV `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`]) -OVS_WAIT_WHILE([kill -0 `cat parent` || kill -0 `cat newpid` || test -e pid], - [kill `cat parent`]) -AT_CLEANUP - -AT_SETUP([daemon --monitor restart exit code - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -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([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --monitor& 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. -AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat parent`]) -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`]) -# 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`]) -OVS_WAIT_WHILE([kill -0 `cat parent` || kill -0 `cat newpid` || test -e pid], - [kill `cat parent`]) -AT_CLEANUP - -AT_SETUP([daemon --detach - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -AT_CAPTURE_FILE([pid]) -# 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([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [0]) -AT_CHECK([test -s pid]) -AT_CHECK([kill -0 `cat pid`]) -# Kill the daemon and make sure that the pidfile gets deleted. -cp pid saved-pid -kill `cat pid` -OVS_WAIT_WHILE([kill -0 `cat saved-pid`]) -AT_CHECK([test ! -e pid]) -AT_CLEANUP - -AT_SETUP([daemon --detach --monitor - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) +m4_define([DAEMON_PYN], + [AT_SETUP([daemon - $1]) + AT_SKIP_IF([test $2 = no]) + AT_KEYWORDS([python daemon]) + 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([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid& echo $! > expected], [0]) + OVS_WAIT_UNTIL([test -s pid], [kill `cat expected`]) + AT_CHECK( + [pid=`cat pid` && expected=`cat expected` && test "$pid" = "$expected"], + [0], [], [], [kill `cat expected`]) + AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat expected`]) + # Kill the daemon and make sure that the pidfile gets deleted. + kill `cat expected` + OVS_WAIT_WHILE([kill -0 `cat expected`]) + AT_CHECK([test ! -e pid]) + AT_CLEANUP]) + +DAEMON_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_MONITOR_PYN], + [AT_SETUP([daemon --monitor - $1]) + AT_SKIP_IF([test $2 = no]) + 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([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --monitor& 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. + AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat parent`]) + 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, 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`]) + AT_CHECK([kill -SEGV `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`]) + OVS_WAIT_WHILE([kill -0 `cat parent` || kill -0 `cat newpid` || test -e pid], + [kill `cat parent`]) + AT_CLEANUP]) + +DAEMON_MONITOR_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_MONITOR_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_MONITOR_RESTART_PYN], + [AT_SETUP([daemon --monitor restart exit code - $1]) + AT_SKIP_IF([test $2 = no]) + 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([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --monitor& 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. + AT_CHECK([kill -0 `cat pid`], [0], [], [], [kill `cat parent`]) + 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`]) + # 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`]) + OVS_WAIT_WHILE([kill -0 `cat parent` || kill -0 `cat newpid` || test -e pid], + [kill `cat parent`]) + AT_CLEANUP]) + +DAEMON_MONITOR_RESTART_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_MONITOR_RESTART_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_DETACH_PYN], + [AT_SETUP([daemon --detach - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([pid]) + # 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([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [0]) + AT_CHECK([test -s pid]) + AT_CHECK([kill -0 `cat pid`]) + # Kill the daemon and make sure that the pidfile gets deleted. + cp pid saved-pid + kill `cat pid` + OVS_WAIT_WHILE([kill -0 `cat saved-pid`]) + AT_CHECK([test ! -e pid]) + AT_CLEANUP]) + +DAEMON_DETACH_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + m4_define([CHECK], - [AT_CHECK([$1], [$2], [$3], [$4], [kill `cat daemon monitor`])]) -AT_CAPTURE_FILE([daemon]) -AT_CAPTURE_FILE([olddaemon]) -AT_CAPTURE_FILE([newdaemon]) -AT_CAPTURE_FILE([monitor]) -AT_CAPTURE_FILE([newmonitor]) -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([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/daemon --detach --monitor], [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, -# and that the parent process of that process is init. -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` != $$]) -# Kill the daemon process, making it look like a segfault, -# and wait for a new daemon process to get spawned. -CHECK([cp daemon olddaemon]) -CHECK([kill -SEGV `cat daemon`], [0], [ignore], [ignore]) -OVS_WAIT_WHILE([kill -0 `cat olddaemon`], [kill `cat olddaemon daemon`]) -OVS_WAIT_UNTIL([test -s daemon && test `cat daemon` != `cat olddaemon`], - [kill `cat olddaemon daemon`]) -CHECK([cp daemon newdaemon]) -# Check that the pidfile names a running process, -# and that the parent process of that process is our child process. -CHECK([kill -0 `cat daemon`]) -CHECK([diff olddaemon newdaemon], [1], [ignore]) -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` != $$]) -# 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]) -OVS_WAIT_WHILE( - [kill -0 `cat monitor` || kill -0 `cat newdaemon` || test -e daemon], - [kill `cat monitor newdaemon`]) + [AT_CHECK([$1], [$2], [$3], [$4], [kill `cat daemon monitor`])]) +m4_define([DAEMON_DETACH_MONITOR_PYN], + [AT_SETUP([daemon --detach --monitor - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([daemon]) + AT_CAPTURE_FILE([olddaemon]) + AT_CAPTURE_FILE([newdaemon]) + AT_CAPTURE_FILE([monitor]) + AT_CAPTURE_FILE([newmonitor]) + 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([$3 $srcdir/test-daemon.py --pidfile=`pwd`/daemon --detach --monitor], [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, + # and that the parent process of that process is init. + 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` != $$]) + # Kill the daemon process, making it look like a segfault, + # and wait for a new daemon process to get spawned. + CHECK([cp daemon olddaemon]) + CHECK([kill -SEGV `cat daemon`], [0], [ignore], [ignore]) + OVS_WAIT_WHILE([kill -0 `cat olddaemon`], [kill `cat olddaemon daemon`]) + OVS_WAIT_UNTIL([test -s daemon && test `cat daemon` != `cat olddaemon`], + [kill `cat olddaemon daemon`]) + CHECK([cp daemon newdaemon]) + # Check that the pidfile names a running process, + # and that the parent process of that process is our child process. + CHECK([kill -0 `cat daemon`]) + CHECK([diff olddaemon newdaemon], [1], [ignore]) + 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` != $$]) + # 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]) + OVS_WAIT_WHILE( + [kill -0 `cat monitor` || kill -0 `cat newdaemon` || test -e daemon], + [kill `cat monitor newdaemon`]) + AT_CLEANUP]) + +DAEMON_DETACH_MONITOR_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_MONITOR_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) m4_undefine([CHECK]) -AT_CLEANUP - -AT_SETUP([daemon --detach startup errors - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -AT_CAPTURE_FILE([pid]) -AT_CHECK([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach --bail], [1], [], [stderr]) -AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as requested' stderr], - [0], [ignore], []) -AT_CHECK([test ! -s pid]) -AT_CLEANUP - -AT_SETUP([daemon --detach --monitor startup errors - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -AT_CAPTURE_FILE([pid]) -AT_CHECK([$PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach --monitor --bail], [1], [], [stderr]) -AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as requested' stderr], - [0], [ignore], []) -AT_CHECK([test ! -s pid]) -AT_CLEANUP - -AT_SETUP([daemon --detach closes standard fds - Python]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -AT_CAPTURE_FILE([pid]) -AT_CAPTURE_FILE([status]) -AT_CAPTURE_FILE([stderr]) -AT_CHECK([(yes 2>stderr; echo $? > status) | $PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [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 + +m4_define([DAEMON_DETACH_ERRORS_PYN], + [AT_SETUP([daemon --detach startup errors - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([pid]) + AT_CHECK([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach --bail], [1], [], [stderr]) + AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as requested' stderr], + [0], [ignore], []) + AT_CHECK([test ! -s pid]) + AT_CLEANUP]) + +DAEMON_DETACH_ERRORS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_ERRORS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_DETACH_MONITOR_ERRORS_PYN], + [AT_SETUP([daemon --detach --monitor startup errors - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([pid]) + AT_CHECK([$3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach --monitor --bail], [1], [], [stderr]) + AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as requested' stderr], + [0], [ignore], []) + AT_CHECK([test ! -s pid]) + AT_CLEANUP]) + +DAEMON_DETACH_MONITOR_ERRORS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_MONITOR_ERRORS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_DETACH_CLOSES_FDS_PYN], + [AT_SETUP([daemon --detach closes standard fds - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([pid]) + AT_CAPTURE_FILE([status]) + AT_CAPTURE_FILE([stderr]) + AT_CHECK([(yes 2>stderr; echo $? > status) | $3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [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 - -AT_SETUP([daemon --detach --monitor closes standard fds]) -AT_SKIP_IF([test $HAVE_PYTHON = no]) -AT_CAPTURE_FILE([pid]) -AT_CAPTURE_FILE([status]) -AT_CAPTURE_FILE([stderr]) -OVSDB_INIT([db]) -AT_CHECK([(yes 2>stderr; echo $? > status) | $PYTHON $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [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]) + +DAEMON_DETACH_CLOSES_FDS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_CLOSES_FDS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) + +m4_define([DAEMON_DETACH_MONITOR_CLOSES_FDS_PYN], + [AT_SETUP([daemon --detach --monitor closes standard fds - $1]) + AT_SKIP_IF([test $2 = no]) + AT_CAPTURE_FILE([pid]) + AT_CAPTURE_FILE([status]) + AT_CAPTURE_FILE([stderr]) + OVSDB_INIT([db]) + AT_CHECK([(yes 2>stderr; echo $? > status) | $3 $srcdir/test-daemon.py --pidfile=`pwd`/pid --detach], [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 + fi + AT_CLEANUP]) + +DAEMON_DETACH_MONITOR_CLOSES_FDS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON]) +DAEMON_DETACH_MONITOR_CLOSES_FDS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])