Mercurial > hg > nginx-tests
annotate userid.t @ 1733:e306bd77321d
Tests: handling of HTTP/2 PUSH_PROMISE frames with CONTINUATION.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 17 Sep 2021 18:56:36 +0300 |
parents | 144c6ce732e4 |
children |
rev | line source |
---|---|
604 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Andrey Zelenkov | |
4 # (C) Nginx, Inc. | |
5 | |
6 # Tests for userid filter module. | |
7 | |
8 ############################################################################### | |
9 | |
10 use warnings; | |
11 use strict; | |
12 | |
13 use Test::More; | |
14 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
15 use Config; |
604 | 16 use MIME::Base64; |
17 use Time::Local; | |
18 | |
19 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
20 | |
21 use lib 'lib'; | |
22 use Test::Nginx; | |
23 | |
24 ############################################################################### | |
25 | |
26 select STDERR; $| = 1; | |
27 select STDOUT; $| = 1; | |
28 | |
1422
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
29 my $t = Test::Nginx->new()->has(qw/http userid map unix/); |
604 | 30 |
31 $t->write_file_expand('nginx.conf', <<'EOF'); | |
32 | |
33 %%TEST_GLOBALS%% | |
34 | |
35 daemon off; | |
36 | |
37 events { | |
38 } | |
39 | |
40 http { | |
41 %%TEST_GLOBALS_HTTP%% | |
42 | |
43 map $args $uid_reset { | |
44 default 0; | |
45 value 1; | |
46 log log; | |
47 } | |
48 | |
49 server { | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
50 listen 127.0.0.1:8080; |
1422
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
51 listen [::1]:%%PORT_8080%%; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
52 listen unix:%%TESTDIR%%/unix.sock; |
604 | 53 server_name localhost; |
54 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
55 add_header X-Got $uid_got; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
56 add_header X-Reset $uid_reset; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
57 add_header X-Set $uid_set; |
604 | 58 userid on; |
59 | |
60 location / { | |
1177
382011b269f1
Tests: do not inadvertently disable debug logging in userid.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
61 error_log %%TESTDIR%%/error.log debug; |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
62 error_log %%TESTDIR%%/error_reset.log info; |
604 | 63 } |
64 | |
65 location /name { | |
66 userid_name test; | |
67 } | |
68 | |
69 location /path { | |
70 userid_path /0123456789; | |
71 | |
72 location /path/r { | |
73 userid_path /9876543210; | |
74 } | |
75 } | |
76 | |
77 location /domain { | |
78 userid_domain test.domain; | |
79 } | |
80 | |
81 location /mark_off { | |
82 userid_mark off; | |
83 } | |
84 location /mark_eq { | |
85 userid_mark =; | |
86 } | |
87 location /mark_let { | |
88 userid_mark t; | |
89 } | |
90 location /mark_num { | |
91 userid_mark 9; | |
92 } | |
93 | |
94 location /expires_time { | |
95 add_header X-Msec $msec; | |
96 userid_expires 100; | |
97 } | |
98 location /expires_max { | |
99 userid_expires max; | |
100 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
101 location /expires_max/off { |
604 | 102 userid_expires off; |
103 } | |
104 } | |
105 location /expires_off { | |
106 userid_expires off; | |
107 } | |
108 | |
109 location /p3p { | |
110 userid_p3p policyref="/w3c/p3p.xml"; | |
111 } | |
112 | |
113 location /service { | |
114 userid_service 65534; | |
115 } | |
116 | |
117 location /cv1 { | |
118 userid v1; | |
119 userid_mark t; | |
120 } | |
121 | |
1422
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
122 location /ip6 { |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
123 userid off; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
124 proxy_pass http://[::1]:%%PORT_8080%%/; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
125 } |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
126 |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
127 location /unix { |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
128 userid off; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
129 proxy_pass http://unix:%%TESTDIR%%/unix.sock:/; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
130 } |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
131 |
604 | 132 location /clog { |
133 userid log; | |
134 } | |
135 | |
136 location /coff { | |
137 userid off; | |
138 } | |
139 } | |
140 } | |
141 | |
142 EOF | |
143 | |
144 $t->write_file('index.html', ''); | |
145 $t->write_file('expires_time', ''); | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
146 $t->write_file('service', ''); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
147 $t->write_file('cv1', ''); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
148 $t->write_file('clog', ''); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
149 $t->write_file('coff', ''); |
1422
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
150 $t->try_run('no inet6 support')->plan(35); |
604 | 151 |
152 ############################################################################### | |
153 | |
154 # userid | |
155 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
156 like(http_get('/'), qr/Set-Cookie:/, 'cookie on'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
157 like(http_get('/cv1'), qr/Set-Cookie:/, 'cookie v1'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
158 unlike(http_get('/clog'), qr/Set-Cookie:/, 'cookie log'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
159 unlike(http_get('/coff'), qr/Set-Cookie:/, 'cookie off'); |
604 | 160 |
161 # default | |
162 | |
163 my %cookie = get_cookie('/'); | |
164 isnt($cookie{'uid'}, undef, 'name default'); | |
165 is($cookie{'path'}, '/', 'path default'); | |
166 is($cookie{'domain'}, undef, 'domain default'); | |
167 is($cookie{'expires'}, undef, 'expires default'); | |
168 like($cookie{'uid'}, '/\w+={0,2}$/', 'mark default'); | |
817
ada7d1ad985b
Tests: fixed occasional negative match failure in userid.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
614
diff
changeset
|
169 unlike(http_get('/'), qr/^P3P/m, 'p3p default'); |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
170 like(http_get('/'), qr/X-Reset: 0/, 'uid reset variable default'); |
604 | 171 |
172 # name, path, domain and p3p | |
173 | |
174 isnt(get_cookie('/name', 'test'), undef, 'name'); | |
175 is(get_cookie('/path', 'path'), '/0123456789', 'path'); | |
176 is(get_cookie('/domain', 'domain'), 'test.domain', 'domain'); | |
177 like(http_get('/p3p'), qr!P3P: policyref="/w3c/p3p.xml"!, 'p3p'); | |
178 | |
179 # mark | |
180 | |
181 like(get_cookie('/mark_off', 'uid'), '/\w+={0,2}$/', 'mark off'); | |
182 like(get_cookie('/mark_eq', 'uid'), '/==$/', 'mark equal'); | |
183 like(get_cookie('/mark_let', 'uid'), '/t=$/', 'mark letter'); | |
184 like(get_cookie('/mark_num', 'uid'), '/9=$/', 'mark number'); | |
185 | |
186 # expires | |
187 | |
188 my $r = http_get('/expires_time'); | |
189 my ($t1) = $r =~ /X-Msec: (\d+)/; | |
190 is(expires2timegm(cookie($r, 'expires')), $t1 + 100, 'expires time'); | |
191 is(get_cookie('/expires_max', 'expires'), 'Thu, 31-Dec-37 23:55:55 GMT', | |
192 'expires max'); | |
193 is(get_cookie('/expires_off', 'expires'), undef, 'expires off'); | |
194 | |
195 # redefinition | |
196 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
197 unlike(http_get('/expires_max/off'), qr/expires/, 'redefine expires'); |
604 | 198 like(http_get('/path/r'), qr!/9876543210!, 'redefine path'); |
199 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
200 # requests |
604 | 201 |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
202 $r = http_get('/'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
203 my ($uid) = uid_set($r); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
204 isnt($uid, undef, 'uid set variable'); |
604 | 205 |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
206 $r = send_uid('/', cookie($r, 'uid')); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
207 is(uid_got($r), $uid, 'uid got variable'); |
604 | 208 unlike($r, qr/Set-Cookie:/, 'same path request'); |
209 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
210 $r = send_uid('/coff', $uid); |
604 | 211 unlike($r, qr/Set-Cookie:/, 'other path request'); |
212 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
213 $r = send_uid('/?value', $uid); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
214 like($r, qr/Set-Cookie:/, 'uid reset variable value'); |
604 | 215 |
216 # service | |
217 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
218 is(substr(uid_set(http_get('/cv1')), 0, 8), '00000000', 'service default v1'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
219 |
614
0597ca82c26a
Tests: respected byteorder value on longsize=4 but USE_64_BIT_INT.
Sergey Kandaurov <pluknet@nginx.com>
parents:
605
diff
changeset
|
220 my $bigendian = $Config{byteorder} =~ '1234' ? 0 : 1; |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
221 my $addr = $bigendian ? "7F000001" : "0100007F"; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
222 is(substr(uid_set(http_get('/')), 0, 8), $addr, 'service default v2'); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
223 |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
224 $addr = $bigendian ? "0000FFFE" : "FEFF0000"; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
225 is(substr(uid_set(http_get('/service')), 0, 8), $addr, 'service custom'); |
604 | 226 |
1422
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
227 $addr = $bigendian ? "00000001" : "01000000"; |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
228 is(substr(uid_set(http_get('/ip6')), 0, 8), $addr, 'service ipv6'); |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
229 |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
230 is(substr(uid_set(http_get('/unix')), 0, 8), "00000000", 'service unix'); |
2d7fcd713b66
Tests: added userid tests with IPv6 and unix sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1177
diff
changeset
|
231 |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
232 # reset log |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
233 |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
234 send_uid('/?log', cookie($r, 'uid')); |
604 | 235 |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
236 $t->stop(); |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
237 |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
238 like($t->read_file('error_reset.log'), |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
239 '/userid cookie "uid=\w+" was reset/m', 'uid reset variable log'); |
604 | 240 |
241 ############################################################################### | |
242 | |
243 sub cookie { | |
244 my ($r, $key) = @_; | |
245 my %cookie; | |
246 | |
247 $r =~ /(Set-Cookie:[^\x0d]*).*\x0d\x0a?\x0d/ms; | |
248 if ($1) { | |
249 %cookie = $1 =~ /(\w+)=([^;]+)/g; | |
250 } | |
251 | |
252 return $cookie{$key} if defined $key; | |
253 return %cookie; | |
254 } | |
255 | |
256 sub get_cookie { | |
257 my ($url, $key) = @_; | |
258 return cookie(http_get($url), $key); | |
259 } | |
260 | |
261 sub expires2timegm { | |
262 my ($e) = @_; | |
263 my %months = (Jan => 0, Feb => 1, Mar => 2, Apr => 3, May =>4, Jun => 5, | |
264 Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11); | |
265 | |
266 my ($w, $date, $time) = split(" ", $e); | |
267 my ($day, $month, $year) = split("-", $date); | |
268 my ($hour, $min, $sec) = split(":", $time); | |
269 | |
270 return timegm($sec, $min, $hour, $day, $months{$month}, $year); | |
271 } | |
272 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
273 sub uid_set { |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
274 my ($r) = @_; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
275 my ($uid) = $r =~ /X-Set: uid=(.*)\n/m; |
604 | 276 return $uid; |
277 } | |
278 | |
605
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
279 sub uid_got { |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
280 my ($r) = @_; |
a77f19282f63
Tests: switched to using headers to test variables in userid.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
604
diff
changeset
|
281 my ($uid) = $r =~ /X-Got: uid=(.*)\n/m; |
604 | 282 return $uid; |
283 } | |
284 | |
285 sub send_uid { | |
286 my ($url, $uid) = @_; | |
287 return http(<<EOF); | |
288 GET $url HTTP/1.0 | |
289 Host: localhost | |
290 Cookie: uid=$uid | |
291 | |
292 EOF | |
293 } | |
294 | |
295 ############################################################################### |