]>
Commit | Line | Data |
---|---|---|
e39e0d37 MR |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2009 Mark Rada | |
4 | # | |
5 | ||
6 | test_description='gitweb as standalone script (http status tests). | |
7 | ||
8 | This test runs gitweb (git web interface) as a CGI script from the | |
9 | commandline, and checks that it returns the expected HTTP status | |
10 | code and message.' | |
11 | ||
12 | ||
13 | . ./gitweb-lib.sh | |
14 | ||
2a8a4490 RJ |
15 | # |
16 | # Gitweb only provides the functionality tested by the 'modification times' | |
17 | # tests if it can access a date parser from one of these modules: | |
18 | # | |
19 | perl -MHTTP::Date -e 0 >/dev/null 2>&1 && test_set_prereq DATE_PARSER | |
20 | perl -MTime::ParseDate -e 0 >/dev/null 2>&1 && test_set_prereq DATE_PARSER | |
21 | ||
e39e0d37 MR |
22 | # ---------------------------------------------------------------------- |
23 | # snapshot settings | |
24 | ||
4a45f7dd | 25 | test_expect_success 'setup' " |
1b3187ba | 26 | test_commit 'SnapshotTests' 'i can has snapshot' |
4a45f7dd BG |
27 | " |
28 | ||
e39e0d37 MR |
29 | |
30 | cat >>gitweb_config.perl <<\EOF | |
31 | $feature{'snapshot'}{'override'} = 0; | |
32 | EOF | |
33 | ||
34 | test_expect_success \ | |
35 | 'snapshots: tgz only default format enabled' \ | |
36 | 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" && | |
37 | grep "Status: 200 OK" gitweb.output && | |
38 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" && | |
39 | grep "403 - Unsupported snapshot format" gitweb.output && | |
40 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" && | |
41 | grep "403 - Snapshot format not allowed" gitweb.output && | |
42 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" && | |
43 | grep "403 - Unsupported snapshot format" gitweb.output' | |
e39e0d37 MR |
44 | |
45 | ||
46 | cat >>gitweb_config.perl <<\EOF | |
47 | $feature{'snapshot'}{'default'} = ['tgz','tbz2','txz','zip']; | |
48 | EOF | |
49 | ||
50 | test_expect_success \ | |
51 | 'snapshots: all enabled in default, use default disabled value' \ | |
52 | 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" && | |
53 | grep "Status: 200 OK" gitweb.output && | |
54 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tbz2" && | |
55 | grep "Status: 200 OK" gitweb.output && | |
56 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=txz" && | |
57 | grep "403 - Snapshot format not allowed" gitweb.output && | |
58 | gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" && | |
59 | grep "Status: 200 OK" gitweb.output' | |
e39e0d37 MR |
60 | |
61 | ||
62 | cat >>gitweb_config.perl <<\EOF | |
63 | $known_snapshot_formats{'zip'}{'disabled'} = 1; | |
64 | EOF | |
65 | ||
66 | test_expect_success \ | |
67 | 'snapshots: zip explicitly disabled' \ | |
68 | 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=zip" && | |
69 | grep "403 - Snapshot format not allowed" gitweb.output' | |
70 | test_debug 'cat gitweb.output' | |
71 | ||
72 | ||
73 | cat >>gitweb_config.perl <<\EOF | |
74 | $known_snapshot_formats{'tgz'}{'disabled'} = 0; | |
75 | EOF | |
76 | ||
77 | test_expect_success \ | |
78 | 'snapshots: tgz explicitly enabled' \ | |
79 | 'gitweb_run "p=.git;a=snapshot;h=HEAD;sf=tgz" && | |
80 | grep "Status: 200 OK" gitweb.output' | |
745a2db4 | 81 | test_debug 'cat gitweb.headers' |
e39e0d37 MR |
82 | |
83 | ||
fdb0c36e MR |
84 | # ---------------------------------------------------------------------- |
85 | # snapshot hash ids | |
86 | ||
87 | test_expect_success 'snapshots: good tree-ish id' ' | |
88 | gitweb_run "p=.git;a=snapshot;h=master;sf=tgz" && | |
89 | grep "Status: 200 OK" gitweb.output | |
90 | ' | |
745a2db4 | 91 | test_debug 'cat gitweb.headers' |
fdb0c36e MR |
92 | |
93 | test_expect_success 'snapshots: bad tree-ish id' ' | |
94 | gitweb_run "p=.git;a=snapshot;h=frizzumFrazzum;sf=tgz" && | |
95 | grep "404 - Object does not exist" gitweb.output | |
96 | ' | |
97 | test_debug 'cat gitweb.output' | |
98 | ||
99 | test_expect_success 'snapshots: bad tree-ish id (tagged object)' ' | |
100 | echo object > tag-object && | |
101 | git add tag-object && | |
b7d565ea | 102 | test_tick && git commit -m "Object to be tagged" && |
9c103775 | 103 | git tag tagged-object $(git hash-object tag-object) && |
fdb0c36e MR |
104 | gitweb_run "p=.git;a=snapshot;h=tagged-object;sf=tgz" && |
105 | grep "400 - Object is not a tree-ish" gitweb.output | |
106 | ' | |
107 | test_debug 'cat gitweb.output' | |
108 | ||
109 | test_expect_success 'snapshots: good object id' ' | |
9c103775 | 110 | ID=$(git rev-parse --verify HEAD) && |
fdb0c36e MR |
111 | gitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" && |
112 | grep "Status: 200 OK" gitweb.output | |
113 | ' | |
745a2db4 | 114 | test_debug 'cat gitweb.headers' |
fdb0c36e MR |
115 | |
116 | test_expect_success 'snapshots: bad object id' ' | |
117 | gitweb_run "p=.git;a=snapshot;h=abcdef01234;sf=tgz" && | |
118 | grep "404 - Object does not exist" gitweb.output | |
119 | ' | |
120 | test_debug 'cat gitweb.output' | |
121 | ||
b7d565ea TK |
122 | # ---------------------------------------------------------------------- |
123 | # modification times (Last-Modified and If-Modified-Since) | |
124 | ||
2a8a4490 | 125 | test_expect_success DATE_PARSER 'modification: feed last-modified' ' |
b7d565ea TK |
126 | gitweb_run "p=.git;a=atom;h=master" && |
127 | grep "Status: 200 OK" gitweb.headers && | |
128 | grep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers | |
129 | ' | |
130 | test_debug 'cat gitweb.headers' | |
131 | ||
2a8a4490 | 132 | test_expect_success DATE_PARSER 'modification: feed if-modified-since (modified)' ' |
d87ec816 TB |
133 | HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" && |
134 | export HTTP_IF_MODIFIED_SINCE && | |
b7d565ea TK |
135 | test_when_finished "unset HTTP_IF_MODIFIED_SINCE" && |
136 | gitweb_run "p=.git;a=atom;h=master" && | |
137 | grep "Status: 200 OK" gitweb.headers | |
138 | ' | |
139 | test_debug 'cat gitweb.headers' | |
140 | ||
2a8a4490 | 141 | test_expect_success DATE_PARSER 'modification: feed if-modified-since (unmodified)' ' |
d87ec816 TB |
142 | HTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" && |
143 | export HTTP_IF_MODIFIED_SINCE && | |
b7d565ea TK |
144 | test_when_finished "unset HTTP_IF_MODIFIED_SINCE" && |
145 | gitweb_run "p=.git;a=atom;h=master" && | |
146 | grep "Status: 304 Not Modified" gitweb.headers | |
147 | ' | |
148 | test_debug 'cat gitweb.headers' | |
fdb0c36e | 149 | |
2a8a4490 | 150 | test_expect_success DATE_PARSER 'modification: snapshot last-modified' ' |
8745db63 TK |
151 | gitweb_run "p=.git;a=snapshot;h=master;sf=tgz" && |
152 | grep "Status: 200 OK" gitweb.headers && | |
153 | grep "Last-modified: Thu, 7 Apr 2005 22:14:13 +0000" gitweb.headers | |
154 | ' | |
155 | test_debug 'cat gitweb.headers' | |
156 | ||
2a8a4490 | 157 | test_expect_success DATE_PARSER 'modification: snapshot if-modified-since (modified)' ' |
d87ec816 TB |
158 | HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" && |
159 | export HTTP_IF_MODIFIED_SINCE && | |
8745db63 TK |
160 | test_when_finished "unset HTTP_IF_MODIFIED_SINCE" && |
161 | gitweb_run "p=.git;a=snapshot;h=master;sf=tgz" && | |
162 | grep "Status: 200 OK" gitweb.headers | |
163 | ' | |
164 | test_debug 'cat gitweb.headers' | |
165 | ||
2a8a4490 | 166 | test_expect_success DATE_PARSER 'modification: snapshot if-modified-since (unmodified)' ' |
d87ec816 TB |
167 | HTTP_IF_MODIFIED_SINCE="Thu, 7 Apr 2005 22:14:13 +0000" && |
168 | export HTTP_IF_MODIFIED_SINCE && | |
8745db63 TK |
169 | test_when_finished "unset HTTP_IF_MODIFIED_SINCE" && |
170 | gitweb_run "p=.git;a=snapshot;h=master;sf=tgz" && | |
171 | grep "Status: 304 Not Modified" gitweb.headers | |
172 | ' | |
173 | test_debug 'cat gitweb.headers' | |
174 | ||
2a8a4490 | 175 | test_expect_success DATE_PARSER 'modification: tree snapshot' ' |
9c103775 | 176 | ID=$(git rev-parse --verify HEAD^{tree}) && |
d87ec816 TB |
177 | HTTP_IF_MODIFIED_SINCE="Wed, 6 Apr 2005 22:14:13 +0000" && |
178 | export HTTP_IF_MODIFIED_SINCE && | |
8745db63 TK |
179 | test_when_finished "unset HTTP_IF_MODIFIED_SINCE" && |
180 | gitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" && | |
181 | grep "Status: 200 OK" gitweb.headers && | |
182 | ! grep -i "last-modified" gitweb.headers | |
183 | ' | |
184 | test_debug 'cat gitweb.headers' | |
185 | ||
b62a1a98 JWH |
186 | # ---------------------------------------------------------------------- |
187 | # load checking | |
188 | ||
189 | # always hit the load limit | |
190 | cat >>gitweb_config.perl <<\EOF | |
ab35469d | 191 | our $maxload = -1; |
b62a1a98 JWH |
192 | EOF |
193 | ||
ab35469d | 194 | test_expect_success 'load checking: load too high (default action)' ' |
b62a1a98 JWH |
195 | gitweb_run "p=.git" && |
196 | grep "Status: 503 Service Unavailable" gitweb.headers && | |
197 | grep "503 - The load average on the server is too high" gitweb.body | |
198 | ' | |
b62a1a98 JWH |
199 | test_debug 'cat gitweb.headers' |
200 | ||
201 | # turn off load checking | |
202 | cat >>gitweb_config.perl <<\EOF | |
203 | our $maxload = undef; | |
204 | EOF | |
205 | ||
206 | ||
36612e4d JN |
207 | # ---------------------------------------------------------------------- |
208 | # invalid arguments | |
209 | ||
210 | test_expect_success 'invalid arguments: invalid regexp (in project search)' ' | |
211 | gitweb_run "a=project_list;s=*\.git;sr=1" && | |
212 | grep "Status: 400" gitweb.headers && | |
213 | grep "400 - Invalid.*regexp" gitweb.body | |
214 | ' | |
215 | test_debug 'cat gitweb.headers' | |
216 | ||
e39e0d37 | 217 | test_done |