Mercurial > hg > nginx-tests
annotate stream_limit_rate2.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 | ddbde6c5b0cd |
children | f3ba4c74de31 |
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 |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
6 # Tests for stream proxy module, limit rate directives, variables support. |
632
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 |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
28 my $t = Test::Nginx->new()->has(qw/stream stream_map/) |
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 |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
45 map $server_port $down { |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
46 default 1011; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
47 %%PORT_8082%% 0; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
48 %%PORT_8083%% 1; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
49 %%PORT_8085%% 250; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
50 } |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
51 |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
52 map $server_port $up { |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
53 default 1000; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
54 %%PORT_8082%% 0; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
55 %%PORT_8084%% 1; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
56 %%PORT_8086%% 250; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
57 } |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
58 |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
59 proxy_download_rate $down; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
60 proxy_upload_rate $up; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
61 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
62 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
63 listen 127.0.0.1:8081; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
64 proxy_pass 127.0.0.1:8080; |
632
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 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
67 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
68 listen 127.0.0.1:8082; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
69 proxy_pass 127.0.0.1:8080; |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
70 proxy_download_rate $down; |
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
71 proxy_upload_rate $up; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
72 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
73 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
74 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
75 listen 127.0.0.1:8083; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
76 proxy_pass 127.0.0.1:8080; |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
77 proxy_download_rate $down; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
78 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
79 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
80 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
81 listen 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
82 proxy_pass 127.0.0.1:8080; |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
83 proxy_upload_rate $up; |
632
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 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
86 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
87 listen 127.0.0.1:8085; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
88 proxy_pass 127.0.0.1:8080; |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
89 proxy_download_rate $down; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
90 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
91 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
92 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
93 listen 127.0.0.1:8086; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
94 proxy_pass 127.0.0.1:8087; |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
95 proxy_upload_rate $up; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
96 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
97 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
98 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
99 EOF |
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 $t->run_daemon(\&stream_daemon, port(8080)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
102 $t->run_daemon(\&stream_daemon, port(8087)); |
1473
ddbde6c5b0cd
Tests: stream limit rate tests, variables support.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1472
diff
changeset
|
103 $t->try_run('no proxy_download_rate variables')->plan(9); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
104 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
105 $t->waitforsocket('127.0.0.1:' . port(8080)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
106 $t->waitforsocket('127.0.0.1:' . port(8087)); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
107 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
108 ############################################################################### |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
109 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
110 my $str = '1234567890' x 100; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
111 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
112 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
|
113 is($r{'data'}, $str, 'exact limit'); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
114 |
1472
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
115 %r = response($str . 'extra', peer => '127.0.0.1:' . port(8082)); |
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
116 is($r{'data'}, $str . 'extra', 'unlimited'); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
117 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
118 SKIP: { |
1472
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
119 skip 'unsafe on VM', 3 unless $ENV{TEST_NGINX_UNSAFE}; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
120 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
121 # 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
|
122 # bytes to upload/download data |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
123 |
1472
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
124 %r = response($str . 'extra', peer => '127.0.0.1:' . port(8081)); |
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
125 is($r{'data'}, $str, 'limited'); |
7ae2747ee593
Tests: more stream_limit_rate.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
126 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
127 %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
|
128 is($r{'data'}, '1', 'download - one byte'); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
129 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
130 %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
|
131 is($r{'data'}, '1', 'upload - one byte'); |
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 |
787
a53c310c695d
Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
711
diff
changeset
|
135 # Five chunks are split with four 1s delays: |
710
aed139eaaf3f
Tests: fixed comment after 40675bfad7d3.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
637
diff
changeset
|
136 # the first four chunks are quarters of test string |
aed139eaaf3f
Tests: fixed comment after 40675bfad7d3.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
637
diff
changeset
|
137 # 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
|
138 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
139 %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
|
140 my $diff = time() - $r{'time'}; |
787
a53c310c695d
Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
711
diff
changeset
|
141 cmp_ok($diff, '>=', 4, 'download - time'); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
142 is($r{'data'}, $str, 'download - data'); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
143 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
144 my $time = time(); |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
145 %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
|
146 $diff = time() - $time; |
787
a53c310c695d
Tests: relaxed limit_rate tests timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
711
diff
changeset
|
147 cmp_ok($diff, '>=', 4, 'upload - time'); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
148 is($r{'data'}, $str . 'close', 'upload - data'); |
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 ############################################################################### |
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 sub response { |
937
b1fa8e0cc27b
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
866
diff
changeset
|
153 my ($data, %extra) = @_; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
154 |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
155 my $s = stream($extra{peer}); |
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
156 $s->write($data); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
157 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
158 $data = ''; |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
159 while (1) { |
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
160 my $buf = $s->read(); |
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
161 last unless length($buf); |
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
162 |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
163 $data .= $buf; |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
164 |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
165 last if $extra{'readonce'}; |
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 $data =~ /([\S]*)\s?(\d+)?/; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
168 |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
787
diff
changeset
|
169 return ('data' => $1, 'time' => $2) |
632
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 |
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 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
174 sub stream_daemon { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
175 my $port = shift; |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
937
diff
changeset
|
176 |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
177 my $server = IO::Socket::INET->new( |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
178 Proto => 'tcp', |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
179 LocalAddr => '127.0.0.1', |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
180 LocalPort => $port, |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
181 Listen => 5, |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
182 Reuse => 1 |
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 or die "Can't create listening socket: $!\n"; |
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 my $sel = IO::Select->new($server); |
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 local $SIG{PIPE} = 'IGNORE'; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
189 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
190 while (my @ready = $sel->can_read) { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
191 foreach my $fh (@ready) { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
192 if ($server == $fh) { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
193 my $new = $fh->accept; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
194 $new->autoflush(1); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
195 $sel->add($new); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
196 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
197 } elsif (stream_handle_client($fh)) { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
198 $sel->remove($fh); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
199 $fh->close; |
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 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
202 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
203 } |
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 sub stream_handle_client { |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
206 my ($client) = @_; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
207 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
208 log2c("(new connection $client)"); |
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 $client->sysread(my $buffer, 65536) or return 1; |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
211 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
212 log2i("$client $buffer"); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
213 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
214 $buffer .= " " . time() if $client->sockport() eq port(8080); |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
215 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
216 log2o("$client $buffer"); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
217 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
218 $client->syswrite($buffer); |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
219 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
220 return $client->sockport() eq port(8080) ? 1 : $buffer =~ /close/; |
632
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
221 } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
222 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
223 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
224 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
225 sub log2c { Test::Nginx::log_core('||', @_); } |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
226 |
c8d6f816e094
Tests: stream limit rate tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
227 ############################################################################### |