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