Skip to content

Commit

Permalink
tests: Tolerate ignored SIGPIPE in daemon tests.
Browse files Browse the repository at this point in the history
I noticed that when I run "make check" inside an Emacs compile-mode buffer,
the "daemon --detach closes standard fds" and "daemon --detach --monitor closes
standard fds" tests failed.  Investigation showed that Emacs ignores
SIGPIPE in the compile subprocess, which caused the "yes" process in these
tests to emit the message "yes: Broken pipe" and exit with status 1 instead
of dying from SIGPIPE.

This commit changes these tests to allow either behavior.
  • Loading branch information
blp committed Jun 24, 2010
1 parent 26b3154 commit cfcef6b
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions tests/daemon.at
Original file line number Diff line number Diff line change
Expand Up @@ -150,20 +150,40 @@ AT_CLEANUP

AT_SETUP([daemon --detach closes standard fds])
AT_CAPTURE_FILE([pid])
AT_CAPTURE_FILE([status])
AT_CAPTURE_FILE([stderr])
OVSDB_INIT([db])
AT_CHECK([(yes; echo $? > status) | ovsdb-server --detach --pidfile=$PWD/pid --unixctl=$PWD/unixctl db], [0], [], [stderr])
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])
AT_CHECK([kill -l `cat status`], [0], [PIPE
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_CAPTURE_FILE([pid])
AT_CAPTURE_FILE([status])
AT_CAPTURE_FILE([stderr])
OVSDB_INIT([db])
AT_CHECK([(yes; echo $? > status) | ovsdb-server --detach --monitor --pidfile=$PWD/pid --unixctl=$PWD/unixctl db], [0], [], [stderr])
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])
AT_CHECK([kill -l `cat status`], [0], [PIPE
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

0 comments on commit cfcef6b

Please sign in to comment.