Skip to content

Commit 7f640b7

Browse files
spearcegitster
authored andcommitted
http-backend: Test configuration options
Test the major configuration settings which control access to the repository: http.getanyfile http.uploadpack http.receivepack Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 5abb013 commit 7f640b7

File tree

1 file changed

+229
-0
lines changed

1 file changed

+229
-0
lines changed

t/t5560-http-backend.sh

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
#!/bin/sh
2+
3+
test_description='test git-http-backend'
4+
. ./test-lib.sh
5+
6+
if test -n "$NO_CURL"; then
7+
say 'skipping test, git built without http support'
8+
test_done
9+
fi
10+
11+
LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5560'}
12+
. "$TEST_DIRECTORY"/lib-httpd.sh
13+
start_httpd
14+
15+
find_file() {
16+
cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
17+
find $1 -type f |
18+
sed -e 1q
19+
}
20+
21+
config() {
22+
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" config $1 $2
23+
}
24+
25+
GET() {
26+
curl --include "$HTTPD_URL/smart/repo.git/$1" >out 2>/dev/null &&
27+
tr '\015' Q <out |
28+
sed '
29+
s/Q$//
30+
1q
31+
' >act &&
32+
echo "HTTP/1.1 $2" >exp &&
33+
test_cmp exp act
34+
}
35+
36+
POST() {
37+
curl --include --data "$2" \
38+
--header "Content-Type: application/x-$1-request" \
39+
"$HTTPD_URL/smart/repo.git/$1" >out 2>/dev/null &&
40+
tr '\015' Q <out |
41+
sed '
42+
s/Q$//
43+
1q
44+
' >act &&
45+
echo "HTTP/1.1 $3" >exp &&
46+
test_cmp exp act
47+
}
48+
49+
log_div() {
50+
echo >>"$HTTPD_ROOT_PATH"/access.log
51+
echo "### $1" >>"$HTTPD_ROOT_PATH"/access.log
52+
echo "###" >>"$HTTPD_ROOT_PATH"/access.log
53+
}
54+
55+
test_expect_success 'setup repository' '
56+
echo content >file &&
57+
git add file &&
58+
git commit -m one &&
59+
60+
mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
61+
(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
62+
git --bare init &&
63+
: >objects/info/alternates &&
64+
: >objects/info/http-alternates
65+
) &&
66+
git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
67+
git push public master:master &&
68+
69+
(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
70+
git repack -a -d
71+
) &&
72+
73+
echo other >file &&
74+
git add file &&
75+
git commit -m two &&
76+
git push public master:master &&
77+
78+
LOOSE_URL=$(find_file objects/??) &&
79+
PACK_URL=$(find_file objects/pack/*.pack) &&
80+
IDX_URL=$(find_file objects/pack/*.idx)
81+
'
82+
83+
get_static_files() {
84+
GET HEAD "$1" &&
85+
GET info/refs "$1" &&
86+
GET objects/info/packs "$1" &&
87+
GET objects/info/alternates "$1" &&
88+
GET objects/info/http-alternates "$1" &&
89+
GET $LOOSE_URL "$1" &&
90+
GET $PACK_URL "$1" &&
91+
GET $IDX_URL "$1"
92+
}
93+
94+
test_expect_success 'direct refs/heads/master not found' '
95+
log_div "refs/heads/master"
96+
GET refs/heads/master "404 Not Found"
97+
'
98+
test_expect_success 'static file is ok' '
99+
log_div "getanyfile default"
100+
get_static_files "200 OK"
101+
'
102+
test_expect_success 'static file if http.getanyfile true is ok' '
103+
log_div "getanyfile true"
104+
config http.getanyfile true &&
105+
get_static_files "200 OK"
106+
'
107+
test_expect_success 'static file if http.getanyfile false fails' '
108+
log_div "getanyfile false"
109+
config http.getanyfile false &&
110+
get_static_files "403 Forbidden"
111+
'
112+
113+
test_expect_success 'http.uploadpack default enabled' '
114+
log_div "uploadpack default"
115+
GET info/refs?service=git-upload-pack "200 OK" &&
116+
POST git-upload-pack 0000 "200 OK"
117+
'
118+
test_expect_success 'http.uploadpack true' '
119+
log_div "uploadpack true"
120+
config http.uploadpack true &&
121+
GET info/refs?service=git-upload-pack "200 OK" &&
122+
POST git-upload-pack 0000 "200 OK"
123+
'
124+
test_expect_success 'http.uploadpack false' '
125+
log_div "uploadpack false"
126+
config http.uploadpack false &&
127+
GET info/refs?service=git-upload-pack "403 Forbidden" &&
128+
POST git-upload-pack 0000 "403 Forbidden"
129+
'
130+
131+
test_expect_success 'http.receivepack default disabled' '
132+
log_div "receivepack default"
133+
GET info/refs?service=git-receive-pack "403 Forbidden" &&
134+
POST git-receive-pack 0000 "403 Forbidden"
135+
'
136+
test_expect_success 'http.receivepack true' '
137+
log_div "receivepack true"
138+
config http.receivepack true &&
139+
GET info/refs?service=git-receive-pack "200 OK" &&
140+
POST git-receive-pack 0000 "200 OK"
141+
'
142+
test_expect_success 'http.receivepack false' '
143+
log_div "receivepack false"
144+
config http.receivepack false &&
145+
GET info/refs?service=git-receive-pack "403 Forbidden" &&
146+
POST git-receive-pack 0000 "403 Forbidden"
147+
'
148+
149+
cat >exp <<EOF
150+
151+
### refs/heads/master
152+
###
153+
GET /smart/repo.git/refs/heads/master HTTP/1.1 404 -
154+
155+
### getanyfile default
156+
###
157+
GET /smart/repo.git/HEAD HTTP/1.1 200
158+
GET /smart/repo.git/info/refs HTTP/1.1 200
159+
GET /smart/repo.git/objects/info/packs HTTP/1.1 200
160+
GET /smart/repo.git/objects/info/alternates HTTP/1.1 200 -
161+
GET /smart/repo.git/objects/info/http-alternates HTTP/1.1 200 -
162+
GET /smart/repo.git/$LOOSE_URL HTTP/1.1 200
163+
GET /smart/repo.git/$PACK_URL HTTP/1.1 200
164+
GET /smart/repo.git/$IDX_URL HTTP/1.1 200
165+
166+
### getanyfile true
167+
###
168+
GET /smart/repo.git/HEAD HTTP/1.1 200
169+
GET /smart/repo.git/info/refs HTTP/1.1 200
170+
GET /smart/repo.git/objects/info/packs HTTP/1.1 200
171+
GET /smart/repo.git/objects/info/alternates HTTP/1.1 200 -
172+
GET /smart/repo.git/objects/info/http-alternates HTTP/1.1 200 -
173+
GET /smart/repo.git/$LOOSE_URL HTTP/1.1 200
174+
GET /smart/repo.git/$PACK_URL HTTP/1.1 200
175+
GET /smart/repo.git/$IDX_URL HTTP/1.1 200
176+
177+
### getanyfile false
178+
###
179+
GET /smart/repo.git/HEAD HTTP/1.1 403 -
180+
GET /smart/repo.git/info/refs HTTP/1.1 403 -
181+
GET /smart/repo.git/objects/info/packs HTTP/1.1 403 -
182+
GET /smart/repo.git/objects/info/alternates HTTP/1.1 403 -
183+
GET /smart/repo.git/objects/info/http-alternates HTTP/1.1 403 -
184+
GET /smart/repo.git/$LOOSE_URL HTTP/1.1 403 -
185+
GET /smart/repo.git/$PACK_URL HTTP/1.1 403 -
186+
GET /smart/repo.git/$IDX_URL HTTP/1.1 403 -
187+
188+
### uploadpack default
189+
###
190+
GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
191+
POST /smart/repo.git/git-upload-pack HTTP/1.1 200 -
192+
193+
### uploadpack true
194+
###
195+
GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
196+
POST /smart/repo.git/git-upload-pack HTTP/1.1 200 -
197+
198+
### uploadpack false
199+
###
200+
GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 403 -
201+
POST /smart/repo.git/git-upload-pack HTTP/1.1 403 -
202+
203+
### receivepack default
204+
###
205+
GET /smart/repo.git/info/refs?service=git-receive-pack HTTP/1.1 403 -
206+
POST /smart/repo.git/git-receive-pack HTTP/1.1 403 -
207+
208+
### receivepack true
209+
###
210+
GET /smart/repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
211+
POST /smart/repo.git/git-receive-pack HTTP/1.1 200 -
212+
213+
### receivepack false
214+
###
215+
GET /smart/repo.git/info/refs?service=git-receive-pack HTTP/1.1 403 -
216+
POST /smart/repo.git/git-receive-pack HTTP/1.1 403 -
217+
EOF
218+
test_expect_success 'server request log matches test results' '
219+
sed -e "
220+
s/^.* \"//
221+
s/\"//
222+
s/ [1-9][0-9]*\$//
223+
s/^GET /GET /
224+
" >act <"$HTTPD_ROOT_PATH"/access.log &&
225+
test_cmp exp act
226+
'
227+
228+
stop_httpd
229+
test_done

0 commit comments

Comments
 (0)