@matheusbsbs / matheus-bagliano / commits / faa4bc35a0
Fork 0

http-push: add regression tests

http-push tests require a web server with WebDAV support. This commit introduces a HTTPD test library, which can be configured using the following environment variables. GIT_TEST_HTTPD enable HTTPD tests LIB_HTTPD_PATH web server path LIB_HTTPD_MODULE_PATH web server modules path LIB_HTTPD_PORT listening port LIB_HTTPD_DAV enable DAV LIB_HTTPD_SVN enable SVN LIB_HTTPD_SSL enable SSL Signed-off-by: Clemens Buchacher <drizzd@aon.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Clemens Buchacher committed Feb 27, 2008 at 20:28 UTC faa4bc35a05ddb1822f3770cd8c51859e3b929ee
5 files changed +218 -2
t/lib-httpd.sh new
+96
@@ -0,0 +1,96 @@
1 +#!/bin/sh
2 +#
3 +# Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
4 +#
5 +
6 +if test -z "$GIT_TEST_HTTPD"
7 +then
8 + say "skipping test, network testing disabled by default"
9 + say "(define GIT_TEST_HTTPD to enable)"
10 + test_done
11 + exit
12 +fi
13 +
14 +LIB_HTTPD_PATH=${LIB_HTTPD_PATH-'/usr/sbin/apache2'}
15 +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'8111'}
16 +
17 +TEST_PATH="$PWD"/../lib-httpd
18 +HTTPD_ROOT_PATH="$PWD"/httpd
19 +HTTPD_DOCUMENT_ROOT_PATH=$HTTPD_ROOT_PATH/www
20 +
21 +if ! test -x "$LIB_HTTPD_PATH"
22 +then
23 + say "skipping test, no web server found at '$LIB_HTTPD_PATH'"
24 + test_done
25 + exit
26 +fi
27 +
28 +HTTPD_VERSION=`$LIB_HTTPD_PATH -v | \
29 + sed -n 's/^Server version: Apache\/\([0-9]*\)\..*$/\1/p; q'`
30 +
31 +if test -n "$HTTPD_VERSION"
32 +then
33 + if test -z "$LIB_HTTPD_MODULE_PATH"
34 + then
35 + if ! test $HTTPD_VERSION -ge 2
36 + then
37 + say "skipping test, at least Apache version 2 is required"
38 + test_done
39 + exit
40 + fi
41 +
42 + LIB_HTTPD_MODULE_PATH='/usr/lib/apache2/modules'
43 + fi
44 +else
45 + error "Could not identify web server at '$LIB_HTTPD_PATH'"
46 +fi
47 +
48 +HTTPD_PARA="-d $HTTPD_ROOT_PATH -f $TEST_PATH/apache.conf"
49 +
50 +prepare_httpd() {
51 + mkdir -p $HTTPD_DOCUMENT_ROOT_PATH
52 +
53 + ln -s $LIB_HTTPD_MODULE_PATH $HTTPD_ROOT_PATH/modules
54 +
55 + if test -n "$LIB_HTTPD_SSL"
56 + then
57 + HTTPD_URL=https://127.0.0.1:$LIB_HTTPD_PORT
58 +
59 + RANDFILE_PATH="$HTTPD_ROOT_PATH"/.rnd openssl req \
60 + -config $TEST_PATH/ssl.cnf \
61 + -new -x509 -nodes \
62 + -out $HTTPD_ROOT_PATH/httpd.pem \
63 + -keyout $HTTPD_ROOT_PATH/httpd.pem
64 + export GIT_SSL_NO_VERIFY=t
65 + HTTPD_PARA="$HTTPD_PARA -DSSL"
66 + else
67 + HTTPD_URL=http://127.0.0.1:$LIB_HTTPD_PORT
68 + fi
69 +
70 + if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN"
71 + then
72 + HTTPD_PARA="$HTTPD_PARA -DDAV"
73 +
74 + if test -n "$LIB_HTTPD_SVN"
75 + then
76 + HTTPD_PARA="$HTTPD_PARA -DSVN"
77 + rawsvnrepo="$HTTPD_ROOT_PATH/svnrepo"
78 + svnrepo="http://127.0.0.1:$LIB_HTTPD_PORT/svn"
79 + fi
80 + fi
81 +}
82 +
83 +start_httpd() {
84 + prepare_httpd
85 +
86 + trap 'stop_httpd; die' exit
87 +
88 + "$LIB_HTTPD_PATH" $HTTPD_PARA \
89 + -c "Listen 127.0.0.1:$LIB_HTTPD_PORT" -k start
90 +}
91 +
92 +stop_httpd() {
93 + trap 'die' exit
94 +
95 + "$LIB_HTTPD_PATH" $HTTPD_PARA -k stop
96 +}
t/lib-httpd/apache.conf new
+34
@@ -0,0 +1,34 @@
1 +PidFile httpd.pid
2 +DocumentRoot www
3 +ErrorLog error.log
4 +
5 +<IfDefine SSL>
6 +LoadModule ssl_module modules/mod_ssl.so
7 +
8 +SSLCertificateFile httpd.pem
9 +SSLCertificateKeyFile httpd.pem
10 +SSLRandomSeed startup file:/dev/urandom 512
11 +SSLRandomSeed connect file:/dev/urandom 512
12 +SSLSessionCache none
13 +SSLMutex file:ssl_mutex
14 +SSLEngine On
15 +</IfDefine>
16 +
17 +<IfDefine DAV>
18 + LoadModule dav_module modules/mod_dav.so
19 + LoadModule dav_fs_module modules/mod_dav_fs.so
20 +
21 + DAVLockDB DAVLock
22 + <Location />
23 + Dav on
24 + </Location>
25 +</IfDefine>
26 +
27 +<IfDefine SVN>
28 + LoadModule dav_svn_module modules/mod_dav_svn.so
29 +
30 + <Location /svn>
31 + DAV svn
32 + SVNPath svnrepo
33 + </Location>
34 +</IfDefine>
t/lib-httpd/ssl.cnf new
+8
@@ -0,0 +1,8 @@
1 +RANDFILE = $ENV::RANDFILE_PATH
2 +
3 +[ req ]
4 +default_bits = 1024
5 +distinguished_name = req_distinguished_name
6 +prompt = no
7 +[ req_distinguished_name ]
8 +commonName = 127.0.0.1
t/t5540-http-push.sh new
+73
@@ -0,0 +1,73 @@
1 +#!/bin/sh
2 +#
3 +# Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
4 +#
5 +
6 +test_description='test http-push
7 +
8 +This test runs various sanity checks on http-push.'
9 +
10 +. ./test-lib.sh
11 +
12 +ROOT_PATH="$PWD"
13 +LIB_HTTPD_DAV=t
14 +
15 +. ../lib-httpd.sh
16 +
17 +if ! start_httpd >&3 2>&4
18 +then
19 + say "skipping test, web server setup failed"
20 + test_done
21 + exit
22 +fi
23 +
24 +test_expect_success 'setup remote repository' '
25 + cd "$ROOT_PATH" &&
26 + mkdir test_repo &&
27 + cd test_repo &&
28 + git init &&
29 + : >path1 &&
30 + git add path1 &&
31 + test_tick &&
32 + git commit -m initial &&
33 + cd - &&
34 + git clone --bare test_repo test_repo.git &&
35 + cd test_repo.git &&
36 + git --bare update-server-info &&
37 + chmod +x hooks/post-update &&
38 + cd - &&
39 + mv test_repo.git $HTTPD_DOCUMENT_ROOT_PATH
40 +'
41 +
42 +test_expect_success 'clone remote repository' '
43 + cd "$ROOT_PATH" &&
44 + git clone $HTTPD_URL/test_repo.git test_repo_clone
45 +'
46 +
47 +test_expect_success 'push to remote repository' '
48 + cd "$ROOT_PATH"/test_repo_clone &&
49 + : >path2 &&
50 + git add path2 &&
51 + test_tick &&
52 + git commit -m path2 &&
53 + git push
54 +'
55 +
56 +test_expect_success 'create and delete remote branch' '
57 + cd "$ROOT_PATH"/test_repo_clone &&
58 + git checkout -b dev &&
59 + : >path3 &&
60 + git add path3 &&
61 + test_tick &&
62 + git commit -m dev &&
63 + git push origin dev &&
64 + git fetch &&
65 + git push origin :dev &&
66 + git branch -d -r origin/dev &&
67 + git fetch &&
68 + ! git show-ref --verify refs/remotes/origin/dev
69 +'
70 +
71 +stop_httpd
72 +
73 +test_done
t/test-lib.sh
+7 -2
@@ -80,7 +80,7 @@ do
80 -q|--q|--qu|--qui|--quie|--quiet)
81 quiet=t; shift ;;
82 --no-color)
83 - color=; shift ;;
83 + color=; shift ;;
84 --no-python)
85 # noop now...
86 shift ;;
@@ -142,7 +142,12 @@ test_count=0
142 test_fixed=0
143 test_broken=0
144
145 -trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
145 +die () {
146 + echo >&5 "FATAL: Unexpected exit with code $?"
147 + exit 1
148 +}
149 +
150 +trap 'die' exit
151
152 test_tick () {
153 if test -z "${test_tick+set}"