Mercurial > hg > nginx-tests
annotate limit_rate.t @ 1477:8b122b35703b
Tests: fixed session reuse tests in ssl_certificate.t with TLSv1.3.
Previously, session data was retrieved too early, before server passed
application data, which usually means NewSessionTicket is not yet sent.
The fix is to ask server for application data, then retrieve a session.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 20 May 2019 16:00:40 +0300 |
parents | 054f06c8a1e6 |
children | b8b92ed90485 |
rev | line source |
---|---|
1471
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for limit_rate and limit_rate_after directives. |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 ############################################################################### |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 select STDERR; $| = 1; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDOUT; $| = 1; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 plan(skip_all => 'win32') if $^O eq 'MSWin32'; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http proxy/); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 $t->write_file_expand('nginx.conf', <<'EOF'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 %%TEST_GLOBALS%% |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 daemon off; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 events { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 http { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 %%TEST_GLOBALS_HTTP%% |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 log_format test escape=none $uri:$arg_a$arg_xal:$upstream_response_time; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 server { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 listen 127.0.0.1:8080; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 server_name localhost; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 location / { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 proxy_pass http://127.0.0.1:8081; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 access_log %%TESTDIR%%/test.log test; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 server { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 listen 127.0.0.1:8081; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 server_name localhost; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 limit_rate 12k; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 limit_rate_after 256; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 location /data { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 add_header X-Accel-Redirect $arg_xar; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 add_header X-Accel-Limit-Rate $arg_xal; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 location /redirect { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 limit_rate 0; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 alias %%TESTDIR%%/data; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 location /var { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 alias %%TESTDIR%%/data; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 limit_rate $arg_l; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 limit_rate_after $arg_a; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 location /proxy/ { |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 proxy_pass http://127.0.0.1:8081/; |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 } |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 EOF |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 $t->write_file('data', 'X' x 30000); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 $t->try_run('no limit_rate variables')->plan(7); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 ############################################################################### |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 # NB: response time may be 1s less, if timer is scheduled on upper half second |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 like(http_get('/data'), qr/^(XXXXXXXXXX){3000}\x0d?\x0a?$/m, 'response body'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 like($t->read_file('test.log'), qr/data::[12]/, 'limit_rate'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 # /proxy -> /redirect |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 # before 1.17.0, limit was set once in ngx_http_update_location_config() |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 http_get('/proxy/data?xar=/redirect'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 like($t->read_file('test.log'), qr!proxy/data::0!, 'X-Accel-Redirect'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 # X-Accel-Limit-Rate has higher precedence |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 http_get('/proxy/data?xar=/redirect&xal=25000'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 like($t->read_file('test.log'), qr!proxy/data:25000:1!, 'X-Accel-Limit-Rate'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 http_get('/var?l=12k&a=256'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 like($t->read_file('test.log'), qr/var:256:[12]/, 'variable'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 http_get('/var?l=12k&a=40k'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 like($t->read_file('test.log'), qr/var:40k:0/, 'variable after'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 http_get('/var'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 like($t->read_file('test.log'), qr/var::0/, 'variables unset'); |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 |
054f06c8a1e6
Tests: limit_rate / limit_rate_after tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 ############################################################################### |