Mercurial > hg > nginx-tests
annotate limit_rate.t @ 1993:6b1222de8286
Tests: fixed prerequisites for regular expressions in maps.
Regular expressions in maps are only recognized when nginx is compiled
with the PCRE library. The simplest way to make sure it is the case
is to require the rewrite module, which cannot be compiled in without
the PCRE library.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 01 Aug 2024 10:37:20 +0300 |
parents | 5ac6efbe5552 |
children |
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); |
1693
5ac6efbe5552
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1495
diff
changeset
|
85 $t->run()->plan(7); |
1471
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 ############################################################################### |