Mercurial > hg > nginx-tests
annotate stream_limit_rate2.t @ 1571:1b4ceab9cb1c
Tests: fixed ssl_certificate.t with LibreSSL client.
Net::SSLeay::connect() that manages TLS handshake could return unexpected
error when receiving server alert, as seen in server certificate tests if
it could not been selected. Typically, it returns the expected error -1,
but with certain libssl implementations it can be 0, as explained below.
The error is propagated from libssl's SSL_connect(), which is usually -1.
In modern OpenSSL versions, it is the default error code used in the state
machine returned when something went wrong with parsing TLS message header.
In versions up to OpenSSL 1.0.2, with SSLv23_method() used by default, -1
is the only error code in the ssl_connect() method implementation which is
used as well if receiving alert while parsing ServerHello. BoringSSL also
seems to return -1. But it is not so with LibreSSL that returns zero.
Previously, tests failed with client built with LibreSSL with SSLv3 removed.
Here, the error is propagated directly from ssl_read_bytes() method, which
is always implemented as ssl3_read_bytes() in all TLS methods. It could be
also seen with OpenSSL up to 1.0.2 with non-default methods explicitly set.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 29 May 2020 23:10:20 +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 ############################################################################### |