comparison stream_udp_limit_rate.t @ 1430:bba26f4b40ef

Tests: stream limit rate tests with datagrams.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 16 Jan 2019 18:32:30 +0300
parents
children aab729315dca
comparison
equal deleted inserted replaced
1429:f7f387086278 1430:bba26f4b40ef
1 #!/usr/bin/perl
2
3 # (C) Sergey Kandaurov
4 # (C) Nginx, Inc.
5
6 # Tests for stream proxy module with datagrams, limit rate directives.
7
8 ###############################################################################
9
10 use warnings;
11 use strict;
12
13 use Test::More;
14
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
16
17 use lib 'lib';
18 use Test::Nginx;
19 use Test::Nginx::Stream qw/ dgram /;
20
21 ###############################################################################
22
23 select STDERR; $| = 1;
24 select STDOUT; $| = 1;
25
26 my $t = Test::Nginx->new()->has(qw/stream udp/)
27 ->write_file_expand('nginx.conf', <<'EOF');
28
29 %%TEST_GLOBALS%%
30
31 daemon off;
32
33 events {
34 }
35
36 stream {
37 proxy_requests 2;
38 proxy_responses 1;
39
40 server {
41 listen 127.0.0.1:%%PORT_8982_UDP%% udp;
42 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%;
43 }
44
45 server {
46 listen 127.0.0.1:%%PORT_8983_UDP%% udp;
47 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%;
48 proxy_download_rate 500;
49 }
50
51 server {
52 listen 127.0.0.1:%%PORT_8984_UDP%% udp;
53 proxy_pass 127.0.0.1:%%PORT_8980_UDP%%;
54 proxy_upload_rate 1000;
55 }
56 }
57
58 EOF
59
60 $t->run_daemon(\&udp_daemon, port(8980), $t);
61 $t->try_run('no proxy_requests')->plan(8);
62
63 $t->waitforfile($t->testdir . '/' . port(8980));
64
65 ###############################################################################
66
67 my $str = '1234567890' x 100;
68
69 # unlimited
70
71 my $s = dgram('127.0.0.1:' . port(8982));
72 is($s->io($str), $str, 'unlimited');
73 is($s->io($str), $str, 'unlimited 2');
74
75 # datagram doesn't get split
76
77 my $t1;
78
79 TODO: {
80 local $TODO = 'split datagram';
81
82 $s = dgram('127.0.0.1:' . port(8983));
83 is($s->io($str), $str, 'download');
84 $t1 = time();
85 is($s->io($str), $str, 'download 2');
86
87 }
88
89 my $t2 = time();
90 cmp_ok($t1, '<', $t2, 'download 2 delayed');
91
92 TODO: {
93 todo_skip 'infinite event report', 3;
94
95 $s = dgram('127.0.0.1:' . port(8984));
96 is($s->io($str), $str, 'upload');
97
98 is($s->io($str, read_timeout => 0.5), '', 'upload limited');
99
100 select undef, undef, undef, 0.6;
101
102 is($s->io($str), $str, 'upload passed');
103
104 }
105
106 ###############################################################################
107
108 sub udp_daemon {
109 my ($port, $t) = @_;
110
111 my $server = IO::Socket::INET->new(
112 Proto => 'udp',
113 LocalAddr => "127.0.0.1:$port",
114 )
115 or die "Can't create listening socket: $!\n";
116
117 # signal we are ready
118
119 open my $fh, '>', $t->testdir() . "/$port";
120 close $fh;
121
122 while (1) {
123 $server->recv(my $buffer, 65536);
124 log2i("$server $buffer");
125
126 log2o("$server $buffer");
127 $server->send($buffer);
128 }
129 }
130
131 sub log2i { Test::Nginx::log_core('|| <<', @_); }
132 sub log2o { Test::Nginx::log_core('|| >>', @_); }
133 sub log2c { Test::Nginx::log_core('||', @_); }
134
135 ###############################################################################