git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Add test case for update hooks in receive-pack.

From
Shawn O. Pearce <spearce@spearce.org>
Date
Dec 31, 2006, 07:20 UTC
Message-ID
<20061231072023.GA6479@spearce.org>

Verify that the update hooks work as documented/advertised. This is a simple set of tests to check that the update hooks run with the parameters expected, have their STDOUT and STDERR redirected to the client side of the connection, and that their STDIN does not contain any data (as its actually /dev/null).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 On top of my previous series of patches for receive-pack.  This test
 fails unless those patches are applied.  ;-)
 t/t5401-update-hooks.sh |   77 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/t/t5401-update-hooks.sh b/t/t5401-update-hooks.sh
new file mode 100755
index 0000000..8a879f7
--- /dev/null
+++ b/t/t5401-update-hooks.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 Shawn O. Pearce
+#
+
+test_description='Test the update hook infrastructure.'
+. ./test-lib.sh
+
+test_expect_success setup '
+	echo This is a test. >a &&
+	git-update-index --add a &&
+	tree0=$(git-write-tree) &&
+	commit0=$(echo setup | git-commit-tree $tree0) &&
+	git-update-ref HEAD $commit0 &&
+	git-clone ./. victim &&
+	echo We hope it works. >a &&
+	git-update-index a &&
+	tree1=$(git-write-tree) &&
+	commit1=$(echo modify | git-commit-tree $tree1 -p $commit0) &&
+	git-update-ref HEAD $commit1
+	'
+
+cat >victim/.git/hooks/update <<'EOF'
+#!/bin/sh
+echo "$@" >$GIT_DIR/update.args
+read x; echo -n "$x" >$GIT_DIR/update.stdin
+echo STDOUT update
+echo STDERR update >&2
+EOF
+chmod u+x victim/.git/hooks/update
+
+cat >victim/.git/hooks/post-update <<'EOF'
+#!/bin/sh
+echo "$@" >$GIT_DIR/post-update.args
+read x; echo -n "$x" >$GIT_DIR/post-update.stdin
+echo STDOUT post-update
+echo STDERR post-update >&2
+EOF
+chmod u+x victim/.git/hooks/post-update
+
+test_expect_success push '
+	git-send-pack ./victim/.git/ master >send.out 2>send.err
+	'
+test_expect_success 'hooks ran' '
+	test -f victim/.git/update.args &&
+	test -f victim/.git/update.stdin &&
+	test -f victim/.git/post-update.args &&
+	test -f victim/.git/post-update.stdin
+	'
+
+test_expect_success 'update hook arguments' '
+	echo refs/heads/master $commit0 $commit1 \
+	 | diff -u - victim/.git/update.args
+	'
+test_expect_success 'post-update hook arguments' '
+	echo refs/heads/master \
+	 | diff -u - victim/.git/post-update.args
+	'
+
+test_expect_failure 'update hook stdin is /dev/null' '
+	test -s victim/.git/update.stdin
+	'
+test_expect_failure 'post-update hook stdin is /dev/null' '
+	test -s victim/.git/post-update.stdin
+	'
+
+test_expect_failure 'send-pack produced no output' '
+	test -s send.out
+	'
+test_expect_success 'send-pack stderr contains hook messages' '
+	grep "STDOUT update" send.err &&
+	grep "STDERR update" send.err &&
+	grep "STDOUT post-update" send.err &&
+	grep "STDERR post-update" send.err
+	'
+
+test_done
-- 
1.5.0.rc0.g7200
Message 1 of 1 in “Add test case for update hooks in receive-pack.”
  1. Add test case for update hooks in receive-pack.Shawn O. Pearce, Dec 31, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.