]>
Commit | Line | Data |
---|---|---|
faa4bc35 CB |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at> | |
4 | # | |
5 | ||
6 | if test -z "$GIT_TEST_HTTPD" | |
7 | then | |
fadb5156 | 8 | skip_all="Network testing disabled (define GIT_TEST_HTTPD to enable)" |
faa4bc35 | 9 | test_done |
faa4bc35 CB |
10 | fi |
11 | ||
69707d61 JS |
12 | HTTPD_PARA="" |
13 | ||
0d344738 TC |
14 | for DEFAULT_HTTPD_PATH in '/usr/sbin/httpd' '/usr/sbin/apache2' |
15 | do | |
16 | if test -x "$DEFAULT_HTTPD_PATH" | |
17 | then | |
18 | break | |
19 | fi | |
20 | done | |
21 | ||
22 | for DEFAULT_HTTPD_MODULE_PATH in '/usr/libexec/apache2' \ | |
23 | '/usr/lib/apache2/modules' \ | |
24 | '/usr/lib64/httpd/modules' \ | |
25 | '/usr/lib/httpd/modules' | |
26 | do | |
27 | if test -d "$DEFAULT_HTTPD_MODULE_PATH" | |
28 | then | |
29 | break | |
30 | fi | |
31 | done | |
32 | ||
69707d61 JS |
33 | case $(uname) in |
34 | Darwin) | |
69707d61 JS |
35 | HTTPD_PARA="$HTTPD_PARA -DDarwin" |
36 | ;; | |
69707d61 JS |
37 | esac |
38 | ||
39 | LIB_HTTPD_PATH=${LIB_HTTPD_PATH-"$DEFAULT_HTTPD_PATH"} | |
faa4bc35 CB |
40 | LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'8111'} |
41 | ||
bfdbee98 | 42 | TEST_PATH="$TEST_DIRECTORY"/lib-httpd |
faa4bc35 CB |
43 | HTTPD_ROOT_PATH="$PWD"/httpd |
44 | HTTPD_DOCUMENT_ROOT_PATH=$HTTPD_ROOT_PATH/www | |
45 | ||
f6288254 JK |
46 | # hack to suppress apache PassEnv warnings |
47 | GIT_VALGRIND=$GIT_VALGRIND; export GIT_VALGRIND | |
48 | GIT_VALGRIND_OPTIONS=$GIT_VALGRIND_OPTIONS; export GIT_VALGRIND_OPTIONS | |
49 | ||
faa4bc35 CB |
50 | if ! test -x "$LIB_HTTPD_PATH" |
51 | then | |
e8344e86 | 52 | skip_all="skipping test, no web server found at '$LIB_HTTPD_PATH'" |
35641310 | 53 | test_done |
faa4bc35 CB |
54 | fi |
55 | ||
56 | HTTPD_VERSION=`$LIB_HTTPD_PATH -v | \ | |
57 | sed -n 's/^Server version: Apache\/\([0-9]*\)\..*$/\1/p; q'` | |
58 | ||
59 | if test -n "$HTTPD_VERSION" | |
60 | then | |
61 | if test -z "$LIB_HTTPD_MODULE_PATH" | |
62 | then | |
63 | if ! test $HTTPD_VERSION -ge 2 | |
64 | then | |
e8344e86 | 65 | skip_all="skipping test, at least Apache version 2 is required" |
faa4bc35 | 66 | test_done |
faa4bc35 | 67 | fi |
0d344738 TC |
68 | if ! test -d "$DEFAULT_HTTPD_MODULE_PATH" |
69 | then | |
e8344e86 | 70 | skip_all="Apache module directory not found. Skipping tests." |
0d344738 TC |
71 | test_done |
72 | fi | |
faa4bc35 | 73 | |
69707d61 | 74 | LIB_HTTPD_MODULE_PATH="$DEFAULT_HTTPD_MODULE_PATH" |
faa4bc35 CB |
75 | fi |
76 | else | |
77 | error "Could not identify web server at '$LIB_HTTPD_PATH'" | |
78 | fi | |
79 | ||
faa4bc35 | 80 | prepare_httpd() { |
13b5481e | 81 | mkdir -p "$HTTPD_DOCUMENT_ROOT_PATH" |
3cf8fe1d | 82 | cp "$TEST_PATH"/passwd "$HTTPD_ROOT_PATH" |
4656bf47 | 83 | cp "$TEST_PATH"/broken-smart-http.sh "$HTTPD_ROOT_PATH" |
faa4bc35 | 84 | |
13b5481e | 85 | ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules" |
faa4bc35 CB |
86 | |
87 | if test -n "$LIB_HTTPD_SSL" | |
88 | then | |
5232586c | 89 | HTTPD_PROTO=https |
faa4bc35 CB |
90 | |
91 | RANDFILE_PATH="$HTTPD_ROOT_PATH"/.rnd openssl req \ | |
13b5481e | 92 | -config "$TEST_PATH/ssl.cnf" \ |
faa4bc35 | 93 | -new -x509 -nodes \ |
13b5481e MH |
94 | -out "$HTTPD_ROOT_PATH/httpd.pem" \ |
95 | -keyout "$HTTPD_ROOT_PATH/httpd.pem" | |
0e46e704 BD |
96 | GIT_SSL_NO_VERIFY=t |
97 | export GIT_SSL_NO_VERIFY | |
faa4bc35 CB |
98 | HTTPD_PARA="$HTTPD_PARA -DSSL" |
99 | else | |
5232586c | 100 | HTTPD_PROTO=http |
faa4bc35 | 101 | fi |
5232586c JK |
102 | HTTPD_DEST=127.0.0.1:$LIB_HTTPD_PORT |
103 | HTTPD_URL=$HTTPD_PROTO://$HTTPD_DEST | |
104 | HTTPD_URL_USER=$HTTPD_PROTO://user%40host@$HTTPD_DEST | |
105 | HTTPD_URL_USER_PASS=$HTTPD_PROTO://user%40host:user%40host@$HTTPD_DEST | |
faa4bc35 CB |
106 | |
107 | if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN" | |
108 | then | |
109 | HTTPD_PARA="$HTTPD_PARA -DDAV" | |
110 | ||
111 | if test -n "$LIB_HTTPD_SVN" | |
112 | then | |
113 | HTTPD_PARA="$HTTPD_PARA -DSVN" | |
114 | rawsvnrepo="$HTTPD_ROOT_PATH/svnrepo" | |
115 | svnrepo="http://127.0.0.1:$LIB_HTTPD_PORT/svn" | |
116 | fi | |
117 | fi | |
118 | } | |
119 | ||
120 | start_httpd() { | |
75318a3b | 121 | prepare_httpd >&3 2>&4 |
faa4bc35 | 122 | |
a5adcbe3 | 123 | trap 'code=$?; stop_httpd; (exit $code); die' EXIT |
faa4bc35 | 124 | |
13b5481e MH |
125 | "$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \ |
126 | -f "$TEST_PATH/apache.conf" $HTTPD_PARA \ | |
75318a3b JK |
127 | -c "Listen 127.0.0.1:$LIB_HTTPD_PORT" -k start \ |
128 | >&3 2>&4 | |
a5adcbe3 CB |
129 | if test $? -ne 0 |
130 | then | |
e8344e86 | 131 | skip_all="skipping test, web server setup failed" |
a5adcbe3 | 132 | trap 'die' EXIT |
75318a3b JK |
133 | test_done |
134 | fi | |
faa4bc35 CB |
135 | } |
136 | ||
137 | stop_httpd() { | |
35641310 | 138 | trap 'die' EXIT |
faa4bc35 | 139 | |
13b5481e | 140 | "$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \ |
69707d61 | 141 | -f "$TEST_PATH/apache.conf" $HTTPD_PARA -k stop |
faa4bc35 | 142 | } |
6cbd6e92 TRC |
143 | |
144 | test_http_push_nonff() { | |
145 | REMOTE_REPO=$1 | |
146 | LOCAL_REPO=$2 | |
147 | BRANCH=$3 | |
148 | ||
149 | test_expect_success 'non-fast-forward push fails' ' | |
150 | cd "$REMOTE_REPO" && | |
151 | HEAD=$(git rev-parse --verify HEAD) && | |
152 | ||
153 | cd "$LOCAL_REPO" && | |
154 | git checkout $BRANCH && | |
155 | echo "changed" > path2 && | |
156 | git commit -a -m path2 --amend && | |
157 | ||
77b5be2a | 158 | test_must_fail git push -v origin >output 2>&1 && |
6cbd6e92 TRC |
159 | (cd "$REMOTE_REPO" && |
160 | test $HEAD = $(git rev-parse --verify HEAD)) | |
161 | ' | |
162 | ||
163 | test_expect_success 'non-fast-forward push show ref status' ' | |
164 | grep "^ ! \[rejected\][ ]*$BRANCH -> $BRANCH (non-fast-forward)$" output | |
165 | ' | |
166 | ||
d3bd0425 | 167 | test_expect_success 'non-fast-forward push shows help message' ' |
0aff719f | 168 | test_i18ngrep "Updates were rejected because" output |
6cbd6e92 TRC |
169 | ' |
170 | } | |
e837936c JK |
171 | |
172 | setup_askpass_helper() { | |
173 | test_expect_success 'setup askpass helper' ' | |
174 | write_script "$TRASH_DIRECTORY/askpass" <<-\EOF && | |
175 | echo >>"$TRASH_DIRECTORY/askpass-query" "askpass: $*" && | |
176 | cat "$TRASH_DIRECTORY/askpass-response" | |
177 | EOF | |
178 | GIT_ASKPASS="$TRASH_DIRECTORY/askpass" && | |
179 | export GIT_ASKPASS && | |
180 | export TRASH_DIRECTORY | |
181 | ' | |
182 | } | |
183 | ||
184 | set_askpass() { | |
185 | >"$TRASH_DIRECTORY/askpass-query" && | |
186 | echo "$*" >"$TRASH_DIRECTORY/askpass-response" | |
187 | } | |
188 | ||
189 | expect_askpass() { | |
190 | dest=$HTTPD_DEST | |
191 | { | |
192 | case "$1" in | |
193 | none) | |
194 | ;; | |
195 | pass) | |
196 | echo "askpass: Password for 'http://$2@$dest': " | |
197 | ;; | |
198 | both) | |
199 | echo "askpass: Username for 'http://$dest': " | |
200 | echo "askpass: Password for 'http://$2@$dest': " | |
201 | ;; | |
202 | *) | |
203 | false | |
204 | ;; | |
205 | esac | |
206 | } >"$TRASH_DIRECTORY/askpass-expect" && | |
207 | test_cmp "$TRASH_DIRECTORY/askpass-expect" \ | |
208 | "$TRASH_DIRECTORY/askpass-query" | |
209 | } |