git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adam Spiers <git@adamspiers.org>
To: git list <git@vger.kernel.org>
Subject: [PATCH] t0008: use named pipe (FIFO) to test check-ignore streaming
Date: Mon, 29 Apr 2013 23:55:25 +0100	[thread overview]
Message-ID: <1367276125-15239-1-git-send-email-git@adamspiers.org> (raw)
In-Reply-To: <20130424080235.GC17889@pacific.linksys.moosehall>

sleeps in the check-ignore test suite are not ideal since they can
fail when the system is under load, or when a tool like valgrind is
used which drastically alters the timing.  Therefore we replace them
with a more robust solution using a named pipe (FIFO).

Thanks to Jeff King for coming up with the redirection wizardry
required to make this work.

http://article.gmane.org/gmane.comp.version-control.git/220916

Signed-off-by: Adam Spiers <git@adamspiers.org>
---
 t/t0008-ignores.sh | 38 +++++++++++++++++---------------------
 1 file changed, 17 insertions(+), 21 deletions(-)

diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index fbf12ae..a56db80 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -688,27 +688,23 @@ do
 	'
 done
 
-test_expect_success 'setup: have stdbuf?' '
-	if which stdbuf >/dev/null 2>&1
-	then
-		test_set_prereq STDBUF
-	fi
-'
-
-test_expect_success STDBUF 'streaming support for --stdin' '
-	(
-		echo one
-		sleep 2
-		echo two
-	) | stdbuf -oL git check-ignore -v -n --stdin >out &
-	pid=$! &&
-	sleep 1 &&
-	grep "^\.gitignore:1:one	one" out &&
-	test $( wc -l <out ) = 1 &&
-	sleep 2 &&
-	grep "^::	two" out &&
-	test $( wc -l <out ) = 2 &&
-	( wait $pid || kill $pid || : ) 2>/dev/null
+test_expect_success PIPE 'streaming support for --stdin' '
+	mkfifo in out &&
+	(git check-ignore -n -v --stdin <in >out &) &&
+
+	# We cannot just "echo >in" because check-ignore would get EOF
+	# after echo exited; instead we open the descriptor in our
+	# shell, and then echo to the fd. We make sure to close it at
+	# the end, so that the subprocess does get EOF and dies
+	# properly.
+	exec 9>in &&
+	test_when_finished "exec 9>&-" &&
+	echo >&9 one &&
+	read response <out &&
+	echo "$response" | grep "^\.gitignore:1:one	one" &&
+	echo >&9 two &&
+	read response <out &&
+	echo "$response" | grep "^::	two"
 '
 
 test_done
-- 
1.8.3.rc0.305.g6580fe1

  reply	other threads:[~2013-04-29 22:55 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-08 18:13 RFC: two minor tweaks to check-ignore to help git-annex assistant Adam Spiers
2013-04-08 21:56 ` Junio C Hamano
2013-04-08 22:20 ` Jeff King
2013-04-11  1:59 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Adam Spiers
2013-04-11  1:59   ` [PATCH 2/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11  5:31     ` Jeff King
2013-04-11 10:55       ` Adam Spiers
2013-04-11 11:20     ` Adam Spiers
2013-04-11 18:33       ` Jeff King
2013-04-11  1:59   ` [PATCH 3/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Adam Spiers
2013-04-11  5:31     ` Jeff King
2013-04-11  1:59   ` [PATCH 4/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11  1:59   ` [PATCH 5/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11  5:25   ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Jeff King
2013-04-11 11:05     ` Adam Spiers
2013-04-11 12:05       ` [PATCH v2 1/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11 12:05         ` [PATCH v2 2/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11 12:05         ` [PATCH v2 3/5] check-ignore: move setup into cmd_check_ignore() Adam Spiers
2013-04-11 12:05         ` [PATCH v2 4/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11 19:11           ` Jeff King
2013-04-11 20:31             ` Adam Spiers
2013-04-11 20:40               ` Jeff King
2013-04-22 18:03               ` Junio C Hamano
2013-04-24  8:02                 ` Adam Spiers
2013-04-29 22:55                   ` Adam Spiers [this message]
2013-04-11 21:04           ` Aaron Schrab
2013-04-11 22:55             ` Adam Spiers
2013-04-11 12:05         ` [PATCH v2 5/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Adam Spiers
2013-04-11 18:09           ` Junio C Hamano
2013-04-11 20:12             ` [PATCH v3 " Adam Spiers
2013-04-12  2:12               ` Junio C Hamano
2013-04-12 11:00                 ` Adam Spiers
2013-04-11 18:35       ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1367276125-15239-1-git-send-email-git@adamspiers.org \
    --to=git@adamspiers.org \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).