[PATCH] t0008: use named pipe (FIFO) to test check-ignore streaming

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxx>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]