Mercurial > hg > nginx-tests
annotate stream_upstream.t @ 1434:fc8341cf92a3
Tests: removed ngx_parse_inet6_url() "::" test from proxy.t.
It results in WSAEADDRNOTAVAIL on win32, be the connection errors detected,
which leads to connect() alert. On other systems, connect() is successful
but it uses the default port (80), which is out of documented ports range.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 24 Jan 2019 17:05:04 +0300 |
parents | 766bcbb632ee |
children | 875967f737d4 |
rev | line source |
---|---|
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Stream tests for upstream module and balancers. |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 use IO::Select; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
711
diff
changeset
|
21 use Test::Nginx::Stream qw/ stream /; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 select STDERR; $| = 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 select STDOUT; $| = 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
28 my $t = Test::Nginx->new()->has(qw/stream/) |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 ->write_file_expand('nginx.conf', <<'EOF'); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 %%TEST_GLOBALS%% |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 daemon off; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 events { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 stream { |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
39 log_format bytes $upstream_addr! |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
40 $upstream_bytes_sent!$upstream_bytes_received; |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
41 |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 upstream u { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
43 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
44 server 127.0.0.1:8085; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 upstream u2 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
48 server 127.0.0.1:8086 down; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
49 server 127.0.0.1:8086; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
50 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
51 server 127.0.0.1:8085; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 upstream u3 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
55 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
56 server 127.0.0.1:8085 weight=2; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 upstream u4 { |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
60 server 127.0.0.1:8086 fail_timeout=1s; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
61 server 127.0.0.1:8084 backup; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 |
561
cd3e32d9997e
Tests: adjusted stream test timeouts, visible on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
556
diff
changeset
|
64 proxy_connect_timeout 1s; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@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:8080; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 proxy_pass u; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
72 listen 127.0.0.1:8081; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 proxy_pass u2; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
77 listen 127.0.0.1:8082; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 proxy_pass u3; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
82 listen 127.0.0.1:8083; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 proxy_pass u4; |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
84 access_log %%TESTDIR%%/u.log bytes; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 EOF |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
90 $t->run_daemon(\&stream_daemon, port(8084)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
91 $t->run_daemon(\&stream_daemon, port(8085)); |
1251
766bcbb632ee
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1105
diff
changeset
|
92 $t->run()->plan(6); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
94 $t->waitforsocket('127.0.0.1:' . port(8084)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
95 $t->waitforsocket('127.0.0.1:' . port(8085)); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
99 my @ports = my ($port4, $port5, $port6) = (port(8084), port(8085), port(8086)); |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
100 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
101 is(many(30, port(8080)), "$port4: 15, $port5: 15", 'balanced'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
102 is(many(30, port(8081)), "$port4: 15, $port5: 15", 'failures'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
103 is(many(30, port(8082)), "$port4: 10, $port5: 20", 'weight'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
104 is(many(30, port(8083)), "$port4: 30", 'backup'); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
106 $t->run_daemon(\&stream_daemon, port(8086)); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
107 $t->waitforsocket('127.0.0.1:' . port(8086)); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
108 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
109 sleep 2; # wait till fail_timeout passes |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
110 is(parallel(30, port(8083)), "$port6: 30", 'recovery'); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
111 |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
112 $t->stop(); |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
113 |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
114 like($t->read_file('u.log'), qr/127.0.0.1:$port6, 127.0.0.1:$port4!0, 1!0, 4/, |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
115 'per-upstream variables'); |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
116 |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 sub many { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
120 my ($count, $port) = @_; |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
121 my (%ports); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 for (1 .. $count) { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
124 if (stream("127.0.0.1:$port")->io('.') =~ /(\d+)/) { |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 $ports{$1} = 0 unless defined $ports{$1}; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 $ports{$1}++; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
130 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports; |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
131 return join ', ', map { $_ . ": " . $ports{$_} } @keys; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
134 sub parallel { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
135 my ($count, $port) = @_; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
136 my (%ports, @s); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
137 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
138 for (1 .. $count) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
139 my $s = stream("127.0.0.1:$port"); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
140 $s->write('keep'); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
141 $s->read(); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
142 push @s, $s; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
143 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
144 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
145 for (1 .. $count) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
146 if ((pop @s)->io('.') =~ /(\d+)/) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
147 $ports{$1} = 0 unless defined $ports{$1}; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
148 $ports{$1}++; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
149 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
150 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
151 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
152 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
153 return join ', ', map { $_ . ": " . $ports{$_} } @keys; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
154 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
155 |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 sub stream_daemon { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 my ($port) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 my $server = IO::Socket::INET->new( |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 Proto => 'tcp', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 LocalAddr => '127.0.0.1', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 LocalPort => $port, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 Listen => 5, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 Reuse => 1 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 ) |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 or die "Can't create listening socket: $!\n"; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 my $sel = IO::Select->new($server); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 local $SIG{PIPE} = 'IGNORE'; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 while (my @ready = $sel->can_read) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 foreach my $fh (@ready) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 if ($server == $fh) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 my $new = $fh->accept; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 $new->autoflush(1); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 $sel->add($new); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 } elsif (stream_handle_client($fh)) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 $sel->remove($fh); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 $fh->close; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 sub stream_handle_client { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 my ($client) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 log2c("(new connection $client)"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
194 $client->sysread(my $buffer, 65536) or return 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 log2i("$client $buffer"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
197 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
198 my $close = $buffer ne 'keep'; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 $buffer = $client->sockport(); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
200 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 log2o("$client $buffer"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
203 $client->syswrite($buffer); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
205 return $close; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
208 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
209 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
210 sub log2c { Test::Nginx::log_core('||', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
211 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
212 ############################################################################### |