Mercurial > hg > nginx-tests
annotate limit_rate.t @ 1974:b5036a0f9ae0 default tip
Tests: improved compatibility when using recent "openssl" app.
Starting with OpenSSL 3.0, "openssl genrsa" generates encrypted keys
in PKCS#8 format instead of previously used PKCS#1 format. Further,
since OpenSSL 1.1.0 such keys are using PBKDF2 hmacWithSHA256.
Such keys are not supported by old SSL libraries, notably by OpenSSL
before 1.0.0 (OpenSSL 0.9.8 only supports hmacWithSHA1) and by BoringSSL
before May 21, 2019 (support for hmacWithSHA256 was added in 302a4dee6c),
and trying to load such keys into nginx compiled with an old SSL library
results in "unsupported prf" errors.
To facilitate testing with old SSL libraries, keys are now generated
with "openssl genrsa -traditional" if the flag is available.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 06 May 2024 00:04:26 +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 ############################################################################### |