blob: e66bdc47b339a063fc12466124629643690825a5 [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 Duesterhus9982fc22021-04-15 21:45:59 +020011} -repeat 21 -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
39 http-response add-header before %[var(txn.before)]
40 http-response add-header after %[var(txn.after)]
41
42 default_backend be
43
Tim Duesterhusd371e992021-04-15 21:45:58 +020044 backend be
45 server s1 ${s1_addr}:${s1_port}
46
47} -start
48
49client c1 -connect ${h1_fe_merge_slashes_sock} {
50 txreq -url "/foo/bar"
51 rxresp
52 expect resp.http.before == "/foo/bar"
53 expect resp.http.after == "/foo/bar"
54
55 txreq -url "/foo//bar"
56 rxresp
57 expect resp.http.before == "/foo//bar"
58 expect resp.http.after == "/foo/bar"
59
60 txreq -url "/foo///bar"
61 rxresp
62 expect resp.http.before == "/foo///bar"
63 expect resp.http.after == "/foo/bar"
64
65 txreq -url "///foo///bar"
66 rxresp
67 expect resp.http.before == "///foo///bar"
68 expect resp.http.after == "/foo/bar"
69
70 txreq -url "///foo/bar"
71 rxresp
72 expect resp.http.before == "///foo/bar"
73 expect resp.http.after == "/foo/bar"
74
75 txreq -url "///foo///bar///"
76 rxresp
77 expect resp.http.before == "///foo///bar///"
78 expect resp.http.after == "/foo/bar/"
79
80 txreq -url "///"
81 rxresp
82 expect resp.http.before == "///"
83 expect resp.http.after == "/"
84
85 txreq -url "/foo?bar=///"
86 rxresp
87 expect resp.http.before == "/foo?bar=///"
88 expect resp.http.after == "/foo?bar=///"
89
90 txreq -url "//foo?bar=///"
91 rxresp
92 expect resp.http.before == "//foo?bar=///"
93 expect resp.http.after == "/foo?bar=///"
94
95 txreq -req OPTIONS -url "*"
96 rxresp
97 expect resp.http.before == "*"
98 expect resp.http.after == "*"
99} -run
Tim Duesterhus9982fc22021-04-15 21:45:59 +0200100
101client c2 -connect ${h1_fe_dotdot_sock} {
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/.."
108 rxresp
109 expect resp.http.before == "/foo/.."
110 expect resp.http.after == "/"
111
112 txreq -url "/foo/../"
113 rxresp
114 expect resp.http.before == "/foo/../"
115 expect resp.http.after == "/"
116
117 txreq -url "/foo/bar/../"
118 rxresp
119 expect resp.http.before == "/foo/bar/../"
120 expect resp.http.after == "/foo/"
121
122 txreq -url "/foo/../bar"
123 rxresp
124 expect resp.http.before == "/foo/../bar"
125 expect resp.http.after == "/bar"
126
127 txreq -url "/foo/../bar/"
128 rxresp
129 expect resp.http.before == "/foo/../bar/"
130 expect resp.http.after == "/bar/"
131
132 txreq -url "/foo/../../bar/"
133 rxresp
134 expect resp.http.before == "/foo/../../bar/"
135 expect resp.http.after == "/../bar/"
136
137 txreq -url "/foo//../../bar/"
138 rxresp
139 expect resp.http.before == "/foo//../../bar/"
140 expect resp.http.after == "/bar/"
141
142 txreq -url "/foo/?bar=/foo/../"
143 rxresp
144 expect resp.http.before == "/foo/?bar=/foo/../"
145 expect resp.http.after == "/foo/?bar=/foo/../"
146
147 txreq -url "/foo/../?bar=/foo/../"
148 rxresp
149 expect resp.http.before == "/foo/../?bar=/foo/../"
150 expect resp.http.after == "/?bar=/foo/../"
151
152 txreq -req OPTIONS -url "*"
153 rxresp
154 expect resp.http.before == "*"
155 expect resp.http.after == "*"
156} -run