blob: cb3fa2f638ac9098e39436a73cd4d324e66b1716 [file] [log] [blame]
Tim Duesterhusd371e992021-04-15 21:45:58 +02001varnishtest "normalize-uri tests"
2#REQUIRE_VERSION=2.4
3
4# This reg-test tests the http-request normalize-uri action.
5
6feature ignore_unknown_macro
7
8server s1 {
9 rxreq
10 txresp
Tim Duesterhusd7b89be2021-04-15 21:46:01 +020011} -repeat 34 -start
Tim Duesterhusd371e992021-04-15 21:45:58 +020012
13haproxy h1 -conf {
14 defaults
15 mode http
16 timeout connect 1s
17 timeout client 1s
18 timeout server 1s
19
20 frontend fe_merge_slashes
21 bind "fd@${fe_merge_slashes}"
22
23 http-request set-var(txn.before) url
24 http-request normalize-uri merge-slashes
25 http-request set-var(txn.after) url
26
27 http-response add-header before %[var(txn.before)]
28 http-response add-header after %[var(txn.after)]
29
30 default_backend be
31
Tim Duesterhus9982fc22021-04-15 21:45:59 +020032 frontend fe_dotdot
33 bind "fd@${fe_dotdot}"
34
35 http-request set-var(txn.before) url
36 http-request normalize-uri dotdot
37 http-request set-var(txn.after) url
38
Tim Duesterhus560e1a62021-04-15 21:46:00 +020039 http-request set-uri %[var(txn.before)]
40 http-request normalize-uri dotdot full
41 http-request set-var(txn.after_full) url
42
Tim Duesterhus9982fc22021-04-15 21:45:59 +020043 http-response add-header before %[var(txn.before)]
44 http-response add-header after %[var(txn.after)]
Tim Duesterhus560e1a62021-04-15 21:46:00 +020045 http-response add-header after-full %[var(txn.after_full)]
Tim Duesterhus9982fc22021-04-15 21:45:59 +020046
47 default_backend be
48
Tim Duesterhusd7b89be2021-04-15 21:46:01 +020049 frontend fe_sort_query
50 bind "fd@${fe_sort_query}"
51
52 http-request set-var(txn.before) url
53 http-request normalize-uri sort-query
54 http-request set-var(txn.after) url
55
56 http-response add-header before %[var(txn.before)]
57 http-response add-header after %[var(txn.after)]
58
59 default_backend be
60
Tim Duesterhusd371e992021-04-15 21:45:58 +020061 backend be
62 server s1 ${s1_addr}:${s1_port}
63
64} -start
65
66client c1 -connect ${h1_fe_merge_slashes_sock} {
67 txreq -url "/foo/bar"
68 rxresp
69 expect resp.http.before == "/foo/bar"
70 expect resp.http.after == "/foo/bar"
71
72 txreq -url "/foo//bar"
73 rxresp
74 expect resp.http.before == "/foo//bar"
75 expect resp.http.after == "/foo/bar"
76
77 txreq -url "/foo///bar"
78 rxresp
79 expect resp.http.before == "/foo///bar"
80 expect resp.http.after == "/foo/bar"
81
82 txreq -url "///foo///bar"
83 rxresp
84 expect resp.http.before == "///foo///bar"
85 expect resp.http.after == "/foo/bar"
86
87 txreq -url "///foo/bar"
88 rxresp
89 expect resp.http.before == "///foo/bar"
90 expect resp.http.after == "/foo/bar"
91
92 txreq -url "///foo///bar///"
93 rxresp
94 expect resp.http.before == "///foo///bar///"
95 expect resp.http.after == "/foo/bar/"
96
97 txreq -url "///"
98 rxresp
99 expect resp.http.before == "///"
100 expect resp.http.after == "/"
101
102 txreq -url "/foo?bar=///"
103 rxresp
104 expect resp.http.before == "/foo?bar=///"
105 expect resp.http.after == "/foo?bar=///"
106
107 txreq -url "//foo?bar=///"
108 rxresp
109 expect resp.http.before == "//foo?bar=///"
110 expect resp.http.after == "/foo?bar=///"
111
112 txreq -req OPTIONS -url "*"
113 rxresp
114 expect resp.http.before == "*"
115 expect resp.http.after == "*"
116} -run
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200117
118client c2 -connect ${h1_fe_dotdot_sock} {
119 txreq -url "/foo/bar"
120 rxresp
121 expect resp.http.before == "/foo/bar"
122 expect resp.http.after == "/foo/bar"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200123 expect resp.http.after-full == "/foo/bar"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200124
125 txreq -url "/foo/.."
126 rxresp
127 expect resp.http.before == "/foo/.."
128 expect resp.http.after == "/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200129 expect resp.http.after-full == "/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200130
131 txreq -url "/foo/../"
132 rxresp
133 expect resp.http.before == "/foo/../"
134 expect resp.http.after == "/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200135 expect resp.http.after-full == "/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200136
137 txreq -url "/foo/bar/../"
138 rxresp
139 expect resp.http.before == "/foo/bar/../"
140 expect resp.http.after == "/foo/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200141 expect resp.http.after-full == "/foo/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200142
143 txreq -url "/foo/../bar"
144 rxresp
145 expect resp.http.before == "/foo/../bar"
146 expect resp.http.after == "/bar"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200147 expect resp.http.after-full == "/bar"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200148
149 txreq -url "/foo/../bar/"
150 rxresp
151 expect resp.http.before == "/foo/../bar/"
152 expect resp.http.after == "/bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200153 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200154
155 txreq -url "/foo/../../bar/"
156 rxresp
157 expect resp.http.before == "/foo/../../bar/"
158 expect resp.http.after == "/../bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200159 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200160
161 txreq -url "/foo//../../bar/"
162 rxresp
163 expect resp.http.before == "/foo//../../bar/"
164 expect resp.http.after == "/bar/"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200165 expect resp.http.after-full == "/bar/"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200166
167 txreq -url "/foo/?bar=/foo/../"
168 rxresp
169 expect resp.http.before == "/foo/?bar=/foo/../"
170 expect resp.http.after == "/foo/?bar=/foo/../"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200171 expect resp.http.after-full == "/foo/?bar=/foo/../"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200172
173 txreq -url "/foo/../?bar=/foo/../"
174 rxresp
175 expect resp.http.before == "/foo/../?bar=/foo/../"
176 expect resp.http.after == "/?bar=/foo/../"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200177 expect resp.http.after-full == "/?bar=/foo/../"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200178
179 txreq -req OPTIONS -url "*"
180 rxresp
181 expect resp.http.before == "*"
182 expect resp.http.after == "*"
Tim Duesterhus560e1a62021-04-15 21:46:00 +0200183 expect resp.http.after-full == "*"
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200184} -run
Tim Duesterhusd7b89be2021-04-15 21:46:01 +0200185
186client c3 -connect ${h1_fe_sort_query_sock} {
187 txreq -url "/?a=a"
188 rxresp
189 expect resp.http.before == "/?a=a"
190 expect resp.http.after == "/?a=a"
191
192 txreq -url "/?a=a&z=z"
193 rxresp
194 expect resp.http.before == "/?a=a&z=z"
195 expect resp.http.after == "/?a=a&z=z"
196
197 txreq -url "/?z=z&a=a"
198 rxresp
199 expect resp.http.before == "/?z=z&a=a"
200 expect resp.http.after == "/?a=a&z=z"
201
202 txreq -url "/?a=z&z=a"
203 rxresp
204 expect resp.http.before == "/?a=z&z=a"
205 expect resp.http.after == "/?a=z&z=a"
206
207 txreq -url "/?z=a&a=z"
208 rxresp
209 expect resp.http.before == "/?z=a&a=z"
210 expect resp.http.after == "/?a=z&z=a"
211
212 txreq -url "/?c&b&a&z&x&y"
213 rxresp
214 expect resp.http.before == "/?c&b&a&z&x&y"
215 expect resp.http.after == "/?a&b&c&x&y&z"
216
217 txreq -url "/?a=&aa=&aaa=&aaaa="
218 rxresp
219 expect resp.http.before == "/?a=&aa=&aaa=&aaaa="
220 expect resp.http.after == "/?a=&aa=&aaa=&aaaa="
221
222 txreq -url "/?aaaa=&a=&aa=&aaa="
223 rxresp
224 expect resp.http.before == "/?aaaa=&a=&aa=&aaa="
225 expect resp.http.after == "/?a=&aa=&aaa=&aaaa="
226
227 txreq -url "/?a=5&a=3&a=1&a=2&a=4"
228 rxresp
229 expect resp.http.before == "/?a=5&a=3&a=1&a=2&a=4"
230 expect resp.http.after == "/?a=5&a=3&a=1&a=2&a=4"
231
232 txreq -url "/?a=5&b=3&a=1&a=2&b=4"
233 rxresp
234 expect resp.http.before == "/?a=5&b=3&a=1&a=2&b=4"
235 expect resp.http.after == "/?a=5&a=1&a=2&b=3&b=4"
236
237 txreq -url "/"
238 rxresp
239 expect resp.http.before == "/"
240 expect resp.http.after == "/"
241
242 txreq -url "/?"
243 rxresp
244 expect resp.http.before == "/?"
245 expect resp.http.after == "/?"
246
247 txreq -req OPTIONS -url "*"
248 rxresp
249 expect resp.http.before == "*"
250 expect resp.http.after == "*"
251} -run