git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: git@vger.kernel.org
Subject: [RFC PATCH v4 26/26] test smart http fetch and push
Date: Wed, 28 Oct 2009 17:00:48 -0700	[thread overview]
Message-ID: <1256774448-7625-27-git-send-email-spearce@spearce.org> (raw)
In-Reply-To: <1256774448-7625-1-git-send-email-spearce@spearce.org>

The top level directory "/git/" of the test Apache server is mapped
through our git-http-backend CGI, but uses the same underlying
repository space as the server's document root.  This is the most
simple installation possible.

Server logs are checked to verify the client has accessed only the
smart URLs during the test.  During fetch testing the headers are
also logged from libcurl to ensure we are making a reasonably sane
HTTP request, and getting back reasonably sane response headers
from the CGI.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 t/lib-httpd/apache.conf |   20 +++++++++
 t/t5540-http-push.sh    |    2 +-
 t/t5541-http-push.sh    |  103 +++++++++++++++++++++++++++++++++++++++++++++++
 t/t5550-http-fetch.sh   |    8 +++-
 t/t5551-http-fetch.sh   |   87 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 218 insertions(+), 2 deletions(-)
 create mode 100755 t/t5541-http-push.sh
 create mode 100755 t/t5551-http-fetch.sh

diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf
index 21aa42f..2098ce0 100644
--- a/t/lib-httpd/apache.conf
+++ b/t/lib-httpd/apache.conf
@@ -8,6 +8,26 @@ ErrorLog error.log
 <IfModule !mod_log_config.c>
 	LoadModule log_config_module modules/mod_log_config.so
 </IfModule>
+<IfModule !mod_cgi.c>
+	LoadModule cgi_module modules/mod_cgi.so
+</IfModule>
+<IfModule !mod_alias.c>
+	LoadModule alias_module modules/mod_alias.so
+</IfModule>
+<IfModule !mod_env.c>
+	LoadModule env_module modules/mod_env.so
+</IfModule>
+
+<Location /git/>
+	SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
+</Location>
+ScriptAlias /git/ ${GIT_EXEC_PATH}/git-http-backend/
+<Directory ${GIT_EXEC_PATH}>
+	Options None
+</Directory>
+<Files ${GIT_EXEC_PATH}/git-http-backend>
+	Options ExecCGI
+</Files>
 
 <IfDefine SSL>
 LoadModule ssl_module modules/mod_ssl.so
diff --git a/t/t5540-http-push.sh b/t/t5540-http-push.sh
index 28a746e..5c0f4d7 100755
--- a/t/t5540-http-push.sh
+++ b/t/t5540-http-push.sh
@@ -3,7 +3,7 @@
 # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
 #
 
-test_description='test http-push
+test_description='test WebDAV http-push
 
 This test runs various sanity checks on http-push.'
 
diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh
new file mode 100755
index 0000000..690c466
--- /dev/null
+++ b/t/t5541-http-push.sh
@@ -0,0 +1,103 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
+#
+
+test_description='test smart pushing over http via http-backend'
+. ./test-lib.sh
+
+if test -n "$NO_CURL"; then
+	say 'skipping test, git built without http support'
+	test_done
+fi
+
+ROOT_PATH="$PWD"
+LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'}
+. "$TEST_DIRECTORY"/lib-httpd.sh
+start_httpd
+
+test_expect_success 'setup remote repository' '
+	cd "$ROOT_PATH" &&
+	mkdir test_repo &&
+	cd test_repo &&
+	git init &&
+	: >path1 &&
+	git add path1 &&
+	test_tick &&
+	git commit -m initial &&
+	cd - &&
+	git clone --bare test_repo test_repo.git &&
+	cd test_repo.git &&
+	git config http.receivepack true &&
+	ORIG_HEAD=$(git rev-parse --verify HEAD) &&
+	cd - &&
+	mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"
+'
+
+test_expect_success 'clone remote repository' '
+	cd "$ROOT_PATH" &&
+	git clone $HTTPD_URL/git/test_repo.git test_repo_clone
+'
+
+test_expect_success 'push to remote repository with packed refs' '
+	cd "$ROOT_PATH"/test_repo_clone &&
+	: >path2 &&
+	git add path2 &&
+	test_tick &&
+	git commit -m path2 &&
+	HEAD=$(git rev-parse --verify HEAD) &&
+	git push &&
+	(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&
+	 test $HEAD = $(git rev-parse --verify HEAD))
+'
+
+test_expect_success 'push already up-to-date' '
+	git push
+'
+
+test_expect_success 'push to remote repository with unpacked refs' '
+	(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&
+	 rm packed-refs &&
+	 git update-ref refs/heads/master $ORIG_HEAD) &&
+	git push &&
+	(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&
+	 test $HEAD = $(git rev-parse --verify HEAD))
+'
+
+test_expect_success 'create and delete remote branch' '
+	cd "$ROOT_PATH"/test_repo_clone &&
+	git checkout -b dev &&
+	: >path3 &&
+	git add path3 &&
+	test_tick &&
+	git commit -m dev &&
+	git push origin dev &&
+	git push origin :dev &&
+	test_must_fail git show-ref --verify refs/remotes/origin/dev
+'
+
+cat >exp <<EOF
+GET  /git/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
+POST /git/test_repo.git/git-upload-pack HTTP/1.1 200
+GET  /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
+POST /git/test_repo.git/git-receive-pack HTTP/1.1 200
+GET  /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
+GET  /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
+POST /git/test_repo.git/git-receive-pack HTTP/1.1 200
+GET  /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
+POST /git/test_repo.git/git-receive-pack HTTP/1.1 200
+GET  /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
+POST /git/test_repo.git/git-receive-pack HTTP/1.1 200
+EOF
+test_expect_success 'used receive-pack service' '
+	sed -e "
+		s/^.* \"//
+		s/\"//
+		s/ [1-9][0-9]*\$//
+		s/^GET /GET  /
+	" >act <"$HTTPD_ROOT_PATH"/access.log &&
+	test_cmp exp act
+'
+
+stop_httpd
+test_done
diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh
index 0e69324..8d6443f 100755
--- a/t/t5550-http-fetch.sh
+++ b/t/t5550-http-fetch.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='test fetching over http'
+test_description='test dumb fetching over http via static file'
 . ./test-lib.sh
 
 if test -n "$NO_CURL"; then
@@ -61,5 +61,11 @@ test_expect_success 'fetch packed objects' '
 	git clone $HTTPD_URL/repo_pack.git
 '
 
+test_expect_success 'did not use upload-pack service' '
+	grep '/git-upload-pack' <"$HTTPD_ROOT_PATH"/access.log >act
+	: >exp
+	test_cmp exp act
+'
+
 stop_httpd
 test_done
diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh
new file mode 100755
index 0000000..afddc2c
--- /dev/null
+++ b/t/t5551-http-fetch.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+test_description='test smart fetching over http via http-backend'
+. ./test-lib.sh
+
+if test -n "$NO_CURL"; then
+	say 'skipping test, git built without http support'
+	test_done
+fi
+
+LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'}
+. "$TEST_DIRECTORY"/lib-httpd.sh
+start_httpd
+
+test_expect_success 'setup repository' '
+	echo content >file &&
+	git add file &&
+	git commit -m one
+'
+
+test_expect_success 'create http-accessible bare repository' '
+	mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+	(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+	 git --bare init
+	) &&
+	git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+	git push public master:master
+'
+
+cat >exp <<EOF
+> GET /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1
+Accept: */*
+Pragma: no-cache
+< HTTP/1.1 200 OK
+< Pragma: no-cache
+< Cache-Control: no-cache, max-age=0, must-revalidate
+< Content-Type: application/x-git-upload-pack-advertisement
+< 
+> POST /git/repo.git/git-upload-pack HTTP/1.1
+Accept-Encoding: deflate, gzip
+Content-Type: application/x-git-upload-pack-request
+Accept: application/x-git-upload-pack-response
+Content-Length: xxxx
+< HTTP/1.1 200 OK
+< Pragma: no-cache
+< Cache-Control: no-cache, max-age=0, must-revalidate
+< Content-Type: application/x-git-upload-pack-result
+< 
+EOF
+test_expect_success 'clone http repository' '
+	GIT_CURL_VERBOSE=1 git clone $HTTPD_URL/git/repo.git clone 2>err &&
+	test_cmp file clone/file &&
+	egrep "^([<>]|Pragma|Accept|Content-|Transfer-)" err |
+	egrep -v "^< (Server|Expires|Date|Content-Length:|Transfer-Encoding: chunked)" |
+	sed -e "
+		s/
//
+		s/^Content-Length: .*$/Content-Length: xxxx/
+	" >act &&
+	test_cmp exp act
+'
+
+test_expect_success 'fetch changes via http' '
+	echo content >>file &&
+	git commit -a -m two &&
+	git push public
+	(cd clone && git pull) &&
+	test_cmp file clone/file
+'
+
+cat >exp <<EOF
+GET  /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
+POST /git/repo.git/git-upload-pack HTTP/1.1 200
+GET  /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
+POST /git/repo.git/git-upload-pack HTTP/1.1 200
+EOF
+test_expect_success 'used upload-pack service' '
+	sed -e "
+		s/^.* \"//
+		s/\"//
+		s/ [1-9][0-9]*\$//
+		s/^GET /GET  /
+	" >act <"$HTTPD_ROOT_PATH"/access.log &&
+	test_cmp exp act
+'
+
+stop_httpd
+test_done
-- 
1.6.5.2.181.gd6f41

  parent reply	other threads:[~2009-10-29  0:02 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-29  0:00 [RFC PATCH v4 00/26] Return of smart HTTP Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 01/26] http-push: fix check condition on http.c::finish_http_pack_request() Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 02/26] pkt-line: Add strbuf based functions Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 03/26] pkt-line: Make packet_read_line easier to debug Shawn O. Pearce
2009-10-29  3:27   ` Junio C Hamano
2009-10-29 15:11     ` Shawn O. Pearce
2009-10-29 20:43       ` Junio C Hamano
2009-10-29 21:58         ` Shawn O. Pearce
2009-10-30 17:57           ` Jeff King
2009-10-30 19:12             ` Shawn O. Pearce
2009-10-30 19:30               ` Jeff King
2009-10-30 19:31               ` David Brown
2009-10-30 19:35             ` Junio C Hamano
2009-10-29  0:00 ` [RFC PATCH v4 04/26] fetch-pack: Use a strbuf to compose the want list Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 05/26] Move "get_ack()" back to fetch-pack Shawn O. Pearce
2009-10-29  3:24   ` Junio C Hamano
2009-10-29 15:08     ` Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 06/26] Add multi_ack_detailed capability to fetch-pack/upload-pack Shawn O. Pearce
2009-10-29  5:57   ` Junio C Hamano
2009-10-29 16:17     ` Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 07/26] remote-curl: Refactor walker initialization Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 08/26] fetch: Allow transport -v -v -v to set verbosity to 3 Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 09/26] remote-helpers: Fetch more than one ref in a batch Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 10/26] remote-helpers: Support custom transport options Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 11/26] Move WebDAV HTTP push under remote-curl Shawn O. Pearce
2009-10-30 15:02   ` Tay Ray Chuan
2009-10-31  0:09     ` Shawn O. Pearce
2009-10-30 16:10   ` Tay Ray Chuan
2009-10-30 19:06     ` Clemens Buchacher
2009-10-30 23:20       ` Tay Ray Chuan
2009-10-29  0:00 ` [RFC PATCH v4 12/26] remote-helpers: return successfully if everything up-to-date Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 13/26] Git-aware CGI to provide dumb HTTP transport Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 14/26] Add stateless RPC options to upload-pack, receive-pack Shawn O. Pearce
2009-10-29  3:42   ` Junio C Hamano
2009-10-29 15:26     ` Shawn O. Pearce
2009-10-29 20:43       ` Junio C Hamano
2009-10-30 23:59         ` Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 15/26] Smart fetch and push over HTTP: server side Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 16/26] http-backend: add GIT_PROJECT_ROOT environment var Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 17/26] http-backend: reword some documentation Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 18/26] http-backend: use mod_alias instead of mod_rewrite Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 19/26] http-backend: add example for gitweb on same URL Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 20/26] http-backend: more explict LocationMatch Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 21/26] Discover refs via smart HTTP server when available Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 22/26] Smart push over HTTP: client side Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 23/26] Smart fetch " Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 24/26] Smart HTTP fetch: gzip requests Shawn O. Pearce
2009-10-29  0:00 ` [RFC PATCH v4 25/26] t5540-http-push: remove redundant fetches Shawn O. Pearce
2009-10-29  0:00 ` Shawn O. Pearce [this message]
2009-10-29  0:31   ` [RFC PATCH v4 26/26] test smart http fetch and push Clemens Buchacher
2009-10-29 14:32     ` Shawn O. Pearce
2009-10-29  3:20   ` Junio C Hamano
2009-10-29 14:37     ` Shawn O. Pearce
2009-10-29 14:56       ` Shawn O. Pearce
2009-10-30 22:21       ` Junio C Hamano
2009-10-30 22:59         ` Shawn O. Pearce
2009-10-30 16:10   ` Tay Ray Chuan
2009-10-31  0:13     ` Shawn O. Pearce
2009-10-29  8:12 ` [RFC PATCH v4 00/26] Return of smart HTTP Jakub Narebski
2009-10-29 15:28   ` Shawn O. Pearce

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=1256774448-7625-27-git-send-email-spearce@spearce.org \
    --to=spearce@spearce.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).