Subject: [PATCH] ref namespaces: tests

From: Josh Triplett <[email-masked]>
Date: Thu, 14 Jul 2011 13:50:57 -0700

Test pushing, pulling, and mirroring of repositories with ref
namespaces.

Signed-off-by: Josh Triplett <[email-masked]>
Signed-off-by: Jamey Sharp <[email-masked]>
---

The most recent "What's cooking" suggested that the ref namespaces
patches needed tests.  This test works with PATCHv10, currently in pu.
Please append this patch to the js/ref-namespaces branch.

 t/t5502-fetch-push-namespaces.sh |   77 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)
 create mode 100755 t/t5502-fetch-push-namespaces.sh

diff --git a/t/t5502-fetch-push-namespaces.sh b/t/t5502-fetch-push-namespaces.sh
new file mode 100755
index 0000000..85720b6
--- /dev/null
+++ b/t/t5502-fetch-push-namespaces.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+test_description='fetch/push involving ref namespaces'
+. ./test-lib.sh
+
+test_expect_success setup '
+	test_tick &&
+	git init original &&
+	(
+		cd original &&
+		i=0 &&
+		while [ "$i" -lt 2 ]
+		do
+			echo "$i" > count &&
+			git add count &&
+			test_commit "$i" &&
+			i=$(($i + 1))
+		done &&
+		git remote add pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&
+		git remote add pushee-unnamespaced ../pushee
+	) &&
+	git init pushee &&
+	git init puller
+'
+
+test_expect_success 'pushing into a repository using a ref namespace' '
+	(
+		cd original &&
+		git push pushee-namespaced master &&
+		git ls-remote pushee-namespaced > actual &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba\trefs/heads/master\n" > expected &&
+		test_cmp expected actual &&
+		git push pushee-namespaced --tags &&
+		git ls-remote pushee-namespaced > actual &&
+		printf "fbdf4310c71b916568f04753f603fb24a0544227\trefs/tags/0\n" >> expected &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba\trefs/tags/1\n" >> expected &&
+		test_cmp expected actual &&
+		# Verify that the GIT_NAMESPACE environment variable works as well
+		GIT_NAMESPACE=namespace git ls-remote "ext::git %s ../pushee" > actual &&
+		test_cmp expected actual &&
+		# Verify that --namespace overrides GIT_NAMESPACE
+		GIT_NAMESPACE=garbage git ls-remote pushee-namespaced > actual &&
+		test_cmp expected actual &&
+		# Try a namespace with no content
+		git ls-remote "ext::git --namespace=garbage %s ../pushee" > actual &&
+		test_cmp /dev/null actual &&
+		git ls-remote pushee-unnamespaced > actual &&
+		sed -e "s|refs/|refs/namespaces/namespace/refs/|" expected > expected.unnamespaced &&
+		test_cmp expected.unnamespaced actual
+	)
+'
+
+test_expect_success 'pulling from a repository using a ref namespace' '
+	(
+		cd puller &&
+		git remote add -f pushee-namespaced "ext::git --namespace=namespace %s ../pushee" &&
+		git for-each-ref refs/ > actual &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba commit\trefs/remotes/pushee-namespaced/master\n" > expected &&
+		printf "fbdf4310c71b916568f04753f603fb24a0544227 commit\trefs/tags/0\n" >> expected &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba commit\trefs/tags/1\n" >> expected &&
+		test_cmp expected actual
+	)
+'
+
+test_expect_success 'mirroring a repository using a ref namespace' '
+	git clone --mirror pushee mirror &&
+	(
+		cd mirror &&
+		git for-each-ref refs/ > actual &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba commit\trefs/namespaces/namespace/refs/heads/master\n" > expected &&
+		printf "fbdf4310c71b916568f04753f603fb24a0544227 commit\trefs/namespaces/namespace/refs/tags/0\n" >> expected &&
+		printf "dc65a2e0f299dcc7efddbbe01641a28ee84329ba commit\trefs/namespaces/namespace/refs/tags/1\n" >> expected &&
+		test_cmp expected actual
+	)
+'
+
+test_done
-- 
1.7.5.4