Mercurial > hg > nginx-tests
annotate stream_udp_limit_rate.t @ 1817:c045fbb98e9a
Tests: revised tests for listen port ranges.
Renumbered testing ports to get more chance to execute when run in parallel.
Relaxed condition to skip tests only when the port range is out of sequence.
Adjacent port numbers out of a specified range aren't crucial to skip tests:
if not in sequence, statistically this will be caught in subsequent runs.
Unsafe tests that use wildcard addresses are moved to a separate file.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 23 Dec 2022 19:20:50 +0400 |
parents | f3ba4c74de31 |
children |
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 { |
1609
f3ba4c74de31
Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents:
1535
diff
changeset
|
37 %%TEST_GLOBALS_STREAM%% |
f3ba4c74de31
Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents:
1535
diff
changeset
|
38 |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 proxy_requests 2; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 proxy_responses 1; |
1492
760fdf2865bb
Tests: tune proxy_timeout in stream_udp_limit_rate.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1433
diff
changeset
|
41 proxy_timeout 3s; |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 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
|
45 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
|
46 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 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
|
50 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
|
51 proxy_download_rate 500; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 server { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 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
|
56 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
|
57 proxy_upload_rate 500; |
1430
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 } |
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 EOF |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 $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
|
64 $t->run(); |
1430
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 $t->waitforfile($t->testdir . '/' . port(8980)); |
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 ############################################################################### |
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 my $str = '1234567890' x 100; |
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 # unlimited |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 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
|
75 is($s->io($str), $str, 'unlimited'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 is($s->io($str), $str, 'unlimited 2'); |
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 # datagram doesn't get split |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 $s = dgram('127.0.0.1:' . port(8983)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 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
|
82 my $t1 = time(); |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 is($s->io($str), $str, 'download 2'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 my $t2 = time(); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 cmp_ok($t1, '<', $t2, 'download 2 delayed'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 |
1535
144c6ce732e4
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1492
diff
changeset
|
87 # 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
|
88 |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 $s = dgram('127.0.0.1:' . port(8984)); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 is($s->io($str), $str, 'upload'); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 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
|
92 |
1432
d17fb72140f2
Tests: adjusted stream_udp_limit_rate.t for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1431
diff
changeset
|
93 select undef, undef, undef, 1.6; |
1430
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 is($s->io($str), $str, 'upload passed'); |
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 ############################################################################### |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 sub udp_daemon { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 my ($port, $t) = @_; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 my $server = IO::Socket::INET->new( |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 Proto => 'udp', |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 LocalAddr => "127.0.0.1:$port", |
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 or die "Can't create listening socket: $!\n"; |
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 # signal we are ready |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 open my $fh, '>', $t->testdir() . "/$port"; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 close $fh; |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 while (1) { |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 $server->recv(my $buffer, 65536); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 log2i("$server $buffer"); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 log2o("$server $buffer"); |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 $server->send($buffer); |
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 } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 sub log2c { Test::Nginx::log_core('||', @_); } |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
bba26f4b40ef
Tests: stream limit rate tests with datagrams.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 ############################################################################### |