diff options
author | Clemens Buchacher <drizzd@aon.at> | 2012-01-07 12:42:47 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-08 15:08:11 -0800 |
commit | 561b133c2c29ccf5e2aeaa5d6b1da3835e660db8 (patch) | |
tree | d04a1d4d26ccb77ab0ad44c7fc64d7aa3f0184e4 /t | |
parent | git-daemon: produce output when ready (diff) | |
download | tgif-561b133c2c29ccf5e2aeaa5d6b1da3835e660db8.tar.xz |
git-daemon tests: wait until daemon is ready
In start_daemon, git-daemon is started as a background process. In
theory, the tests may try to connect before the daemon had a chance
to open a listening socket. Avoid this race condition by waiting
for it to output "Ready to rumble". Any other output is considered
an error and the test is aborted.
Should git-daemon produce no output at all, lib-git-daemon would
block forever. This could be fixed by introducing a timeout. On
the other hand, we have no timeout for other git commands which
could suffer from the same problem. Since such a mechanism adds
some complexity, I have decided against it.
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rw-r--r-- | t/lib-git-daemon.sh | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh index 5e81a25942..ef2d01f369 100644 --- a/t/lib-git-daemon.sh +++ b/t/lib-git-daemon.sh @@ -23,12 +23,27 @@ start_git_daemon() { trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT say >&3 "Starting git daemon ..." + mkfifo git_daemon_output git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \ --reuseaddr --verbose \ --base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \ "$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \ - >&3 2>&4 & + >&3 2>git_daemon_output & GIT_DAEMON_PID=$! + { + read line + echo >&4 "$line" + cat >&4 & + + # Check expected output + if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" + then + kill "$GIT_DAEMON_PID" + wait "$GIT_DAEMON_PID" + trap 'die' EXIT + error "git daemon failed to start" + fi + } <git_daemon_output } stop_git_daemon() { @@ -50,4 +65,5 @@ stop_git_daemon() { error "git daemon exited with status: $ret" fi GIT_DAEMON_PID= + rm -f git_daemon_output } |