annotate stream_limit_rate.t @ 1236:93f749c1d5c5

Tests: fixed parallel tests execution with UDP. Previously, when checking ports availability, a UDP socket was always created first, then a TCP socket was created. On success, one of UDP and TCP sockets was closed (depending on the "udp" option) and the second one was used to busy this port in other scripts. This lead to the following problem: in an attempt to reopen a UDP socket used in a given testing script it could be stolen by another script as part of checking ports availability. To solve this problem, UDP and TCP ports were split into two non-overlapping ranges: TCP ports are only used in the range 8000-8499, and UDP ports - in the range 8500-8999. In addition, the order of creating sockets in UDP tests has been reversed: now a TCP socket used as a lock precedes a UDP socket.
author Andrey Zelenkov <zelenkov@nginx.com>
date Thu, 26 Oct 2017 18:00:21 +0300
parents 882267679006
children 7ae2747ee593
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for stream proxy module, limit rate directives.
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 use IO::Select;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use lib 'lib';
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
21 use Test::Nginx::Stream qw/ stream /;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 ###############################################################################
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
866
5048b8f0fedd Tests: removed try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
28 my $t = Test::Nginx->new()->has(qw/stream/)->plan(8)
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29 ->write_file_expand('nginx.conf', <<'EOF');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 daemon off;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 events {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 stream {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39 # download and upload rates are set equal to the maximum
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 # number of bytes transmitted
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 # proxy_download_rate value comes from following calculations:
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43 # test string length (1000) + whitespace (1) + time string length (10)
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 proxy_download_rate 1011;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 proxy_upload_rate 1000;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
49 listen 127.0.0.1:8081;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
50 proxy_pass 127.0.0.1:8080;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
54 listen 127.0.0.1:8082;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
55 proxy_pass 127.0.0.1:8080;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 proxy_download_rate 0;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 proxy_upload_rate 0;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
61 listen 127.0.0.1:8083;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
62 proxy_pass 127.0.0.1:8080;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 proxy_download_rate 1;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
67 listen 127.0.0.1:8084;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
68 proxy_pass 127.0.0.1:8080;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69 proxy_upload_rate 1;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
73 listen 127.0.0.1:8085;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
74 proxy_pass 127.0.0.1:8080;
634
40675bfad7d3 Tests: fixed stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 632
diff changeset
75 proxy_download_rate 250;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
79 listen 127.0.0.1:8086;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
80 proxy_pass 127.0.0.1:8087;
634
40675bfad7d3 Tests: fixed stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 632
diff changeset
81 proxy_upload_rate 250;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 EOF
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
87 $t->run_daemon(\&stream_daemon, port(8080));
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
88 $t->run_daemon(\&stream_daemon, port(8087));
866
5048b8f0fedd Tests: removed try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
89 $t->run();
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
91 $t->waitforsocket('127.0.0.1:' . port(8080));
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
92 $t->waitforsocket('127.0.0.1:' . port(8087));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 ###############################################################################
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 my $str = '1234567890' x 100;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
98 my %r = response($str, peer => '127.0.0.1:' . port(8081));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 is($r{'data'}, $str, 'exact limit');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
101 %r = response($str, peer => '127.0.0.1:' . port(8082));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 is($r{'data'}, $str, 'unlimited');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 SKIP: {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 skip 'unsafe on VM', 2 unless $ENV{TEST_NGINX_UNSAFE};
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 # if interaction between backend and client is slow then proxy can add extra
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 # bytes to upload/download data
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
110 %r = response($str, peer => '127.0.0.1:' . port(8083), readonce => 1);
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 is($r{'data'}, '1', 'download - one byte');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
113 %r = response($str, peer => '127.0.0.1:' . port(8084));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 is($r{'data'}, '1', 'upload - one byte');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117
787
a53c310c695d Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 711
diff changeset
118 # Five chunks are split with four 1s delays:
710
aed139eaaf3f Tests: fixed comment after 40675bfad7d3.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 637
diff changeset
119 # the first four chunks are quarters of test string
aed139eaaf3f Tests: fixed comment after 40675bfad7d3.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 637
diff changeset
120 # and the fifth one is some extra data from backend.
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
122 %r = response($str, peer => '127.0.0.1:' . port(8085));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 my $diff = time() - $r{'time'};
787
a53c310c695d Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 711
diff changeset
124 cmp_ok($diff, '>=', 4, 'download - time');
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 is($r{'data'}, $str, 'download - data');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 my $time = time();
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
128 %r = response($str . 'close', peer => '127.0.0.1:' . port(8086));
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
129 $diff = time() - $time;
787
a53c310c695d Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 711
diff changeset
130 cmp_ok($diff, '>=', 4, 'upload - time');
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
131 is($r{'data'}, $str . 'close', 'upload - data');
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
132
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
133 ###############################################################################
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
134
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
135 sub response {
937
b1fa8e0cc27b Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 866
diff changeset
136 my ($data, %extra) = @_;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
137
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
138 my $s = stream($extra{peer});
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
139 $s->write($data);
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
140
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
141 $data = '';
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
142 while (1) {
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
143 my $buf = $s->read();
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
144 last unless length($buf);
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
145
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
146 $data .= $buf;
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
147
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
148 last if $extra{'readonce'};
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
149 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
150 $data =~ /([\S]*)\s?(\d+)?/;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
151
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 787
diff changeset
152 return ('data' => $1, 'time' => $2)
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
153 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
154
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
155 ###############################################################################
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
156
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
157 sub stream_daemon {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158 my $port = shift;
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 937
diff changeset
159
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
160 my $server = IO::Socket::INET->new(
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161 Proto => 'tcp',
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
162 LocalAddr => '127.0.0.1',
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163 LocalPort => $port,
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 Listen => 5,
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
165 Reuse => 1
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166 )
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 or die "Can't create listening socket: $!\n";
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
169 my $sel = IO::Select->new($server);
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
170
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
171 local $SIG{PIPE} = 'IGNORE';
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
172
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 while (my @ready = $sel->can_read) {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174 foreach my $fh (@ready) {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175 if ($server == $fh) {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
176 my $new = $fh->accept;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
177 $new->autoflush(1);
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
178 $sel->add($new);
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180 } elsif (stream_handle_client($fh)) {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
181 $sel->remove($fh);
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
182 $fh->close;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
183 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
184 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
187
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
188 sub stream_handle_client {
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
189 my ($client) = @_;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
190
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
191 log2c("(new connection $client)");
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
192
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
193 $client->sysread(my $buffer, 65536) or return 1;
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
194
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
195 log2i("$client $buffer");
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
196
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
197 $buffer .= " " . time() if $client->sockport() eq port(8080);
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
198
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
199 log2o("$client $buffer");
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
200
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
201 $client->syswrite($buffer);
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
202
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
203 return $client->sockport() eq port(8080) ? 1 : $buffer =~ /close/;
632
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
204 }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
205
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
206 sub log2i { Test::Nginx::log_core('|| <<', @_); }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
207 sub log2o { Test::Nginx::log_core('|| >>', @_); }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
208 sub log2c { Test::Nginx::log_core('||', @_); }
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
209
c8d6f816e094 Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
210 ###############################################################################