Mercurial > hg > nginx-tests
annotate limit_rate.t @ 1606:e4e0695552ed
Tests: fixed stream_proxy_ssl_conf_command.t.
The stream_proxy_ssl_conf_command.t test used stream return module
to return the response. Since this ignores actual request, but the
perl test code used http_get(). This might result in the request being
sent after the response is returned and the connection closed by the server,
resulting in RST being generated and no response seen by the client at all.
Fix is to use "stream(...)->read()" instead of http_get(), so
no request is sent at all, eliminating possibility of RST being
generated.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 10 Nov 2020 05:03:29 +0300 |
parents | b8b92ed90485 |
children | 5ac6efbe5552 |
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 |
1495
b8b92ed90485
Tests: limit_rate.t adjusted.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1471
diff
changeset
|
102 http_get('/proxy/data?xar=/redirect&xal=13000'); |
b8b92ed90485
Tests: limit_rate.t adjusted.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1471
diff
changeset
|
103 like($t->read_file('test.log'), qr!roxy/data:13000:[12]!, 'X-Accel-Limit-Rate'); |
1471
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 ############################################################################### |