Mercurial > hg > nginx-tests
annotate stream_udp_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 | 144c6ce732e4 |
children | f3ba4c74de31 |
rev | line source |
---|---|
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for stream proxy module with datagrams, limit rate directives. |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::Stream qw/ dgram /; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
1535
144c6ce732e4
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1492
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/stream udp/)->plan(8) |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 daemon off; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 events { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 stream { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 proxy_requests 2; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 proxy_responses 1; |
1492
760fdf2865bb
Tests: tune proxy_timeout in stream_udp_limit_rate.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1433
diff
changeset
|
39 proxy_timeout 3s; |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 listen 127.0.0.1:%%PORT_8982_UDP%% udp; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 listen 127.0.0.1:%%PORT_8983_UDP%% udp; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 proxy_download_rate 500; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 listen 127.0.0.1:%%PORT_8984_UDP%% udp; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%; |
1432
d17fb72140f2
Tests: adjusted stream_udp_limit_rate.t for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1431
diff
changeset
|
55 proxy_upload_rate 500; |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 EOF |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 $t->run_daemon(\&udp_daemon, port(8980), $t); |
1535
144c6ce732e4
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1492
diff
changeset
|
62 $t->run(); |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 $t->waitforfile($t->testdir . '/' . port(8980)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 ############################################################################### |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 my $str = '1234567890' x 100; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 # unlimited |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 my $s = dgram('127.0.0.1:' . port(8982)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 is($s->io($str), $str, 'unlimited'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 is($s->io($str), $str, 'unlimited 2'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 # datagram doesn't get split |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 $s = dgram('127.0.0.1:' . port(8983)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 is($s->io($str), $str, 'download'); |
1535
144c6ce732e4
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1492
diff
changeset
|
80 my $t1 = time(); |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 is($s->io($str), $str, 'download 2'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 my $t2 = time(); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 cmp_ok($t1, '<', $t2, 'download 2 delayed'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 |
1535
144c6ce732e4
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1492
diff
changeset
|
85 # infinite event report before 1.15.9 |
1433
3e0dcf1e7752
Tests: keep stream_udp_limit_rate.t TODOs for a while.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1432
diff
changeset
|
86 |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 $s = dgram('127.0.0.1:' . port(8984)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 is($s->io($str), $str, 'upload'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 is($s->io($str, read_timeout => 0.5), '', 'upload limited'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
1432
d17fb72140f2
Tests: adjusted stream_udp_limit_rate.t for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1431
diff
changeset
|
91 select undef, undef, undef, 1.6; |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 is($s->io($str), $str, 'upload passed'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 ############################################################################### |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 sub udp_daemon { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 my ($port, $t) = @_; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 my $server = IO::Socket::INET->new( |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 Proto => 'udp', |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 LocalAddr => "127.0.0.1:$port", |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 ) |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 or die "Can't create listening socket: $!\n"; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 # signal we are ready |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 open my $fh, '>', $t->testdir() . "/$port"; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 close $fh; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 while (1) { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 $server->recv(my $buffer, 65536); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 log2i("$server $buffer"); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 log2o("$server $buffer"); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 $server->send($buffer); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 sub log2c { Test::Nginx::log_core('||', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 ############################################################################### |