blob: aeffbf68b0dfb0fb150dae855f79cf6a3d422271 [file] [log] [blame]
Remi Tricot-Le Breton1785f3d2020-11-16 15:56:09 +01001varnishtest "Vary support"
2
3#REQUIRE_VERSION=2.3
4
5feature ignore_unknown_macro
6
7server s1 {
8 # Response varying on "accept-encoding"
9 rxreq
10 expect req.url == "/accept-encoding"
11 txresp -nolen -hdr "Transfer-Encoding: chunked" \
12 -hdr "Content-Type: gzip" \
13 -hdr "Vary: accept-encoding" \
14 -hdr "Cache-Control: max-age=5"
15 chunkedlen 15
16 chunkedlen 15
17 chunkedlen 15
18 chunkedlen 0
19
20 # Response varying on "accept-encoding"
21 rxreq
22 expect req.url == "/accept-encoding"
23 txresp -nolen -hdr "Transfer-Encoding: chunked" \
24 -hdr "Content-Type: text/plain" \
25 -hdr "Vary: accept-encoding" \
26 -hdr "Cache-Control: max-age=5"
27 chunkedlen 16
28 chunkedlen 16
29 chunkedlen 16
30 chunkedlen 0
31
32 # Response varying on "accept-encoding" but having two different encodings
33 rxreq
34 expect req.url == "/accept-encoding-multiple"
35 txresp -nolen -hdr "Transfer-Encoding: chunked" \
36 -hdr "Vary: accept-encoding" \
37 -hdr "Cache-Control: max-age=5"
38 chunkedlen 17
39 chunkedlen 17
40 chunkedlen 17
41 chunkedlen 0
42
43 # Unmanaged vary
44 rxreq
45 expect req.url == "/unmanaged"
46 txresp -nolen -hdr "Transfer-Encoding: chunked" \
47 -hdr "Vary: accept-encoding,unmanaged" \
48 -hdr "Cache-Control: max-age=5"
49 chunkedlen 17
50 chunkedlen 17
51 chunkedlen 17
52 chunkedlen 0
53
54 rxreq
55 expect req.url == "/unmanaged"
56 txresp -nolen -hdr "Transfer-Encoding: chunked" \
57 -hdr "Vary: accept-encoding,unmanaged" \
58 -hdr "Cache-Control: max-age=5"
59 chunkedlen 17
60 chunkedlen 17
61 chunkedlen 17
62 chunkedlen 0
63
64
65 # Mixed Vary (Accept-Encoding + Referer)
66 rxreq
67 expect req.url == "/referer-accept-encoding"
68 txresp -nolen -hdr "Transfer-Encoding: chunked" \
69 -hdr "Vary: accept-encoding,referer" \
70 -hdr "Cache-Control: max-age=5"
71 chunkedlen 17
72 chunkedlen 17
73 chunkedlen 17
74 chunkedlen 0
75
76 rxreq
77 expect req.url == "/referer-accept-encoding"
78 txresp -nolen -hdr "Transfer-Encoding: chunked" \
79 -hdr "Vary: referer,accept-encoding" \
80 -hdr "Cache-Control: max-age=5"
81 chunkedlen 18
82 chunkedlen 18
83 chunkedlen 18
84 chunkedlen 0
85
86 rxreq
87 expect req.url == "/referer-accept-encoding"
88 txresp -nolen -hdr "Transfer-Encoding: chunked" \
89 -hdr "Vary: referer,accept-encoding" \
90 -hdr "Cache-Control: max-age=5"
91 chunkedlen 19
92 chunkedlen 19
93 chunkedlen 19
94 chunkedlen 0
95
96} -start
97
98haproxy h1 -conf {
99 defaults
100 mode http
101 ${no-htx} option http-use-htx
102 timeout connect 1s
103 timeout client 1s
104 timeout server 1s
105
106 frontend fe
107 bind "fd@${fe}"
108 default_backend test
109
110 backend test
111 http-request cache-use my_cache
112 server www ${s1_addr}:${s1_port}
113 http-response cache-store my_cache
114 http-response set-header X-Cache-Hit %[res.cache_hit]
115
116 cache my_cache
117 total-max-size 3
118 max-age 20
119 max-object-size 3072
120} -start
121
122
123client c1 -connect ${h1_fe_sock} {
124 # Accept-Encoding Vary
125 txreq -url "/accept-encoding" -hdr "Accept-Encoding: first_value"
126 rxresp
127 expect resp.status == 200
128 expect resp.http.content-type == "gzip"
129 expect resp.bodylen == 45
130
131 txreq -url "/accept-encoding" -hdr "Accept-Encoding: second_value"
132 rxresp
133 expect resp.status == 200
134 expect resp.bodylen == 48
135 expect resp.http.content-type == "text/plain"
136 expect resp.http.X-Cache-Hit == 0
137
138 txreq -url "/accept-encoding" -hdr "Accept-Encoding: first_value"
139 rxresp
140 expect resp.status == 200
141 expect resp.bodylen == 45
142 expect resp.http.content-type == "gzip"
143 expect resp.http.X-Cache-Hit == 1
144
145 txreq -url "/accept-encoding" -hdr "Accept-Encoding: second_value"
146 rxresp
147 expect resp.status == 200
148 expect resp.bodylen == 48
149 expect resp.http.content-type == "text/plain"
150 expect resp.http.X-Cache-Hit == 1
151
152 # The accept-encoding normalizer function sorts alphabeticaly the values
153 # before calculating the secondary key
154 txreq -url "/accept-encoding-multiple" -hdr "Accept-Encoding: first,second"
155 rxresp
156 expect resp.status == 200
157 expect resp.bodylen == 51
158 expect resp.http.X-Cache-Hit == 0
159
160 txreq -url "/accept-encoding-multiple" -hdr "Accept-Encoding: first,second"
161 rxresp
162 expect resp.status == 200
163 expect resp.bodylen == 51
164 expect resp.http.X-Cache-Hit == 1
165
166 txreq -url "/accept-encoding-multiple" -hdr "Accept-Encoding: second,first"
167 rxresp
168 expect resp.status == 200
169 expect resp.bodylen == 51
170 expect resp.http.X-Cache-Hit == 1
171
172 # Unmanaged vary
173 txreq -url "/unmanaged" -hdr "Accept-Encoding: first_value"
174 rxresp
175 expect resp.status == 200
176 expect resp.bodylen == 51
177 expect resp.http.X-Cache-Hit == 0
178
179 txreq -url "/unmanaged" -hdr "Accept-Encoding: first_value"
180 rxresp
181 expect resp.status == 200
182 expect resp.bodylen == 51
183 expect resp.http.X-Cache-Hit == 0
184
185
186 # Mixed Vary (Accept-Encoding + Referer)
187 txreq -url "/referer-accept-encoding" \
188 -hdr "Accept-Encoding: first_value,second_value" \
189 -hdr "Referer: referer"
190 rxresp
191 expect resp.status == 200
192 expect resp.bodylen == 51
193 expect resp.http.X-Cache-Hit == 0
194
195 txreq -url "/referer-accept-encoding" \
196 -hdr "Accept-Encoding: first_value" \
197 -hdr "Referer: other-referer"
198 rxresp
199 expect resp.status == 200
200 expect resp.bodylen == 54
201 expect resp.http.X-Cache-Hit == 0
202
203 txreq -url "/referer-accept-encoding" \
204 -hdr "Accept-Encoding: second_value" \
205 -hdr "Referer: other-referer"
206 rxresp
207 expect resp.status == 200
208 expect resp.bodylen == 57
209 expect resp.http.X-Cache-Hit == 0
210
211 txreq -url "/referer-accept-encoding" \
212 -hdr "Referer: referer" \
213 -hdr "Accept-Encoding: second_value,first_value"
214 rxresp
215 expect resp.status == 200
216 expect resp.bodylen == 51
217 expect resp.http.X-Cache-Hit == 1
218
219 txreq -url "/referer-accept-encoding" \
220 -hdr "Accept-Encoding: first_value" \
221 -hdr "Referer: other-referer"
222 rxresp
223 expect resp.status == 200
224 expect resp.bodylen == 54
225 expect resp.http.X-Cache-Hit == 1
226
227 txreq -url "/referer-accept-encoding" \
228 -hdr "Accept-Encoding: second_value" \
229 -hdr "Referer: other-referer"
230 rxresp
231 expect resp.status == 200
232 expect resp.bodylen == 57
233 expect resp.http.X-Cache-Hit == 1
234} -run