v2 / vlib / net / http / cookie_test.v
267 lines · 262 sloc · 5.16 KB · d9a24ba5b9ccb4131a1fb1e35a8ae02ff34f70fc
Raw
1import net.http
2
3struct SetCookieTestCase {
4 cookie &http.Cookie
5 raw string
6}
7
8struct ReadSetCookiesTestCase {
9 header map[string][]string
10 cookies []&http.Cookie
11}
12
13struct AddCookieTestCase {
14 cookie []&http.Cookie
15 raw string
16}
17
18const write_set_cookie_tests = [
19 SetCookieTestCase{
20 cookie: &http.Cookie{
21 name: 'cookie-1'
22 value: 'v1'
23 }
24 raw: 'cookie-1=v1'
25 },
26 SetCookieTestCase{
27 cookie: &http.Cookie{
28 name: 'cookie-2'
29 value: 'two'
30 max_age: 3600
31 }
32 raw: 'cookie-2=two; Max-Age=3600'
33 },
34 SetCookieTestCase{
35 cookie: &http.Cookie{
36 name: 'cookie-3'
37 value: 'three'
38 domain: '.example.com'
39 }
40 raw: 'cookie-3=three; domain=example.com'
41 },
42 SetCookieTestCase{
43 cookie: &http.Cookie{
44 name: 'cookie-4'
45 value: 'four'
46 path: '/restricted/'
47 }
48 raw: 'cookie-4=four; path=/restricted/'
49 },
50 SetCookieTestCase{
51 cookie: &http.Cookie{
52 name: 'cookie-5'
53 value: 'five'
54 domain: 'wrong;bad.abc'
55 }
56 raw: 'cookie-5=five'
57 },
58 SetCookieTestCase{
59 cookie: &http.Cookie{
60 name: 'cookie-6'
61 value: 'six'
62 domain: 'bad-.abc'
63 }
64 raw: 'cookie-6=six'
65 },
66 // SetCookieTestCase{
67 // cookie: &http.Cookie{name: 'cookie-7', value: 'seven', domain: '127.0.0.1'},
68 // raw: 'cookie-7=seven; domain=127.0.0.1'
69 // },
70 SetCookieTestCase{
71 cookie: &http.Cookie{
72 name: 'cookie-8'
73 value: 'eight'
74 domain: '::1'
75 }
76 raw: 'cookie-8=eight'
77 },
78 // {
79 // cookie: &http.Cookie{name: 'cookie-9', value: 'expiring', expires: time.unix(1257894000, 0)},
80 // 'cookie-9=expiring; Expires=Tue, 10 Nov 2009 23:00:00 GMT',
81 // },
82 // According to IETF 6265 Section 5.1.1.5, the year cannot be less than 1601
83 // SetCookieTestCase{
84 // cookie: &http.Cookie{name: 'cookie-10', value: 'expiring-1601', expires: time.parse('Mon, 01 Jan 1601 01:01:01 GMT')},
85 // raw: 'cookie-10=expiring-1601; Expires=Mon, 01 Jan 1601 01:01:01 GMT'
86 // },
87 // SetCookieTestCase{
88 // cookie: &http.Cookie{name: 'cookie-11', value: 'invalid-expiry', expires: time.parse('Mon, 01 Jan 1600 01:01:01 GMT')},
89 // raw: 'cookie-11=invalid-expiry'
90 // },
91 SetCookieTestCase{
92 cookie: &http.Cookie{
93 name: 'cookie-12'
94 value: 'samesite-default'
95 same_site: .same_site_default_mode
96 }
97 raw: 'cookie-12=samesite-default; SameSite'
98 },
99 SetCookieTestCase{
100 cookie: &http.Cookie{
101 name: 'cookie-13'
102 value: 'samesite-lax'
103 same_site: .same_site_lax_mode
104 }
105 raw: 'cookie-13=samesite-lax; SameSite=Lax'
106 },
107 SetCookieTestCase{
108 cookie: &http.Cookie{
109 name: 'cookie-14'
110 value: 'samesite-strict'
111 same_site: .same_site_strict_mode
112 }
113 raw: 'cookie-14=samesite-strict; SameSite=Strict'
114 },
115 SetCookieTestCase{
116 cookie: &http.Cookie{
117 name: 'cookie-15'
118 value: 'samesite-none'
119 same_site: .same_site_none_mode
120 }
121 raw: 'cookie-15=samesite-none; SameSite=None'
122 },
123 // The 'special' cookies have values containing commas or spaces which
124 // are disallowed by RFC 6265 but are common in the wild.
125 SetCookieTestCase{
126 cookie: &http.Cookie{
127 name: 'special-1'
128 value: 'a z'
129 }
130 raw: 'special-1=a z'
131 },
132 SetCookieTestCase{
133 cookie: &http.Cookie{
134 name: 'special-2'
135 value: ' z'
136 }
137 raw: 'special-2=" z"'
138 },
139 SetCookieTestCase{
140 cookie: &http.Cookie{
141 name: 'special-3'
142 value: 'a '
143 }
144 raw: 'special-3="a "'
145 },
146 SetCookieTestCase{
147 cookie: &http.Cookie{
148 name: 'special-4'
149 value: ' '
150 }
151 raw: 'special-4=" "'
152 },
153 SetCookieTestCase{
154 cookie: &http.Cookie{
155 name: 'special-5'
156 value: 'a,z'
157 }
158 raw: 'special-5=a,z'
159 },
160 SetCookieTestCase{
161 cookie: &http.Cookie{
162 name: 'special-6'
163 value: ',z'
164 }
165 raw: 'special-6=",z"'
166 },
167 SetCookieTestCase{
168 cookie: &http.Cookie{
169 name: 'special-7'
170 value: 'a,'
171 }
172 raw: 'special-7="a,"'
173 },
174 SetCookieTestCase{
175 cookie: &http.Cookie{
176 name: 'special-8'
177 value: ','
178 }
179 raw: 'special-8=","'
180 },
181 SetCookieTestCase{
182 cookie: &http.Cookie{
183 name: 'empty-value'
184 value: ''
185 }
186 raw: 'empty-value='
187 },
188 SetCookieTestCase{
189 cookie: &http.Cookie{
190 name: ''
191 }
192 raw: ''
193 },
194 SetCookieTestCase{
195 cookie: &http.Cookie{
196 name: '\t'
197 }
198 raw: ''
199 },
200 SetCookieTestCase{
201 cookie: &http.Cookie{
202 name: '\r'
203 }
204 raw: ''
205 },
206 SetCookieTestCase{
207 cookie: &http.Cookie{
208 name: 'a\nb'
209 value: 'v'
210 }
211 raw: ''
212 },
213 SetCookieTestCase{
214 cookie: &http.Cookie{
215 name: 'a\nb'
216 value: 'v'
217 }
218 raw: ''
219 },
220 SetCookieTestCase{
221 cookie: &http.Cookie{
222 name: 'a\rb'
223 value: 'v'
224 }
225 raw: ''
226 },
227 SetCookieTestCase{
228 cookie: &http.Cookie{
229 name: 'complex-value'
230 value: 'a b,c;d'
231 }
232 raw: 'complex-value="a b,c;d"'
233 },
234]
235const add_cookies_tests = [
236 AddCookieTestCase{
237 cookie: []
238 raw: ''
239 },
240 AddCookieTestCase{
241 cookie: [&http.Cookie{
242 name: 'cookie-1'
243 value: 'v1'
244 }]
245 raw: 'cookie-1=v1'
246 },
247 AddCookieTestCase{
248 cookie: [&http.Cookie{
249 name: 'cookie-1'
250 value: 'v1'
251 }, &http.Cookie{
252 name: 'cookie-2'
253 value: 'v2'
254 },
255 &http.Cookie{
256 name: 'cookie-3'
257 value: 'v3'
258 }]
259 raw: 'cookie-1=v1; cookie-2=v2; cookie-3=v3'
260 },
261]
262
263fn test_write_set_cookies() {
264 for _, tt in write_set_cookie_tests {
265 assert tt.cookie.str() == tt.raw
266 }
267}
268