annotate stream_udp_limit_rate.t @ 1951:1867428f1673

Tests: fixed h3_limit_req.t spurious failures. In the "reset stream - cancellation" test, HTTP/3 stream is closed without sending the request body when the request is waiting in the limit_req module, and this results in error 444. However, when the request is received with some minor delay due to system load, it is not delayed by limit_req, and the stream is closed during reading the request body, which results in error 400 instead, breaking the test. Fix is to introduce yet another request before the "reset stream" test, so the stream in question is always delayed by limit_req.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 14 Mar 2024 02:25:49 +0300
parents f3ba4c74de31
children
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 {
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 ###############################################################################