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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################