Mercurial > hg > nginx-tests
annotate stream_limit_rate.t @ 1328:a682c219af45
Tests: updated ssl_engine_keys.t test.
After merge with libp11, pkcs11 engine shared object was renamed
from "engine_pkcs11.so" to "pkcs11.so". Changed configuration
accordingly.
Additionally, changed "init" to "1" in the engine configuration. This
keeps pkcs11 engine loaded and prevents segmentation faults observed
during nginx shutdown.
While here, restored correct order of ssl_certificate and ssl_certificate_key.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 22 May 2018 17:46:59 +0300 |
parents | 882267679006 |
children | 7ae2747ee593 |
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 ############################################################################### |