Mercurial > hg > nginx-tests
annotate stream_upstream.t @ 1248:70192b1baf01
Tests: added exception test to stream_js.t using 'require'.
The stream js tests introduced in edf5a3c9e36a fail on njs 0.1.14. It doesn't
currently provide an easy way to check its version, whilst we are obligated to
gracefully handle such cases somehow. With such an addition of 'require', now
the tests are skipped instead on the previous versions.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 21 Nov 2017 13:16:39 +0300 |
parents | a073a545413d |
children | 766bcbb632ee |
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)); |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
92 $t->try_run('no stream access_log')->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 TODO: { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
110 local $TODO = 'not yet' unless $t->has_version('1.11.8'); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
111 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
112 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
|
113 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
|
114 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
115 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
116 |
1026
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
117 $t->stop(); |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
118 |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
119 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
|
120 'per-upstream variables'); |
e74a9342eb96
Tests: stream tests for per-upstream variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
121 |
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 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 sub many { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
125 my ($count, $port) = @_; |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
126 my (%ports); |
556
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 for (1 .. $count) { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
129 if (stream("127.0.0.1:$port")->io('.') =~ /(\d+)/) { |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 $ports{$1} = 0 unless defined $ports{$1}; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 $ports{$1}++; |
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 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
135 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
|
136 return join ', ', map { $_ . ": " . $ports{$_} } @keys; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
139 sub parallel { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
140 my ($count, $port) = @_; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
141 my (%ports, @s); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
142 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
143 for (1 .. $count) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
144 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
|
145 $s->write('keep'); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
146 $s->read(); |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
147 push @s, $s; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
148 } |
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 for (1 .. $count) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
151 if ((pop @s)->io('.') =~ /(\d+)/) { |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
152 $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
|
153 $ports{$1}++; |
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 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
156 |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
157 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
|
158 return join ', ', map { $_ . ": " . $ports{$_} } @keys; |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
159 } |
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
160 |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 sub stream_daemon { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 my ($port) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 my $server = IO::Socket::INET->new( |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 Proto => 'tcp', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 LocalAddr => '127.0.0.1', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 LocalPort => $port, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 Listen => 5, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 Reuse => 1 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 ) |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 or die "Can't create listening socket: $!\n"; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 my $sel = IO::Select->new($server); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 local $SIG{PIPE} = 'IGNORE'; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 while (my @ready = $sel->can_read) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 foreach my $fh (@ready) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 if ($server == $fh) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 my $new = $fh->accept; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 $new->autoflush(1); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 $sel->add($new); |
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 } elsif (stream_handle_client($fh)) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 $sel->remove($fh); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 $fh->close; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 } |
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 } |
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 sub stream_handle_client { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 my ($client) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
197 log2c("(new connection $client)"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 $client->sysread(my $buffer, 65536) or return 1; |
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 log2i("$client $buffer"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
203 my $close = $buffer ne 'keep'; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 $buffer = $client->sockport(); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
205 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 log2o("$client $buffer"); |
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 $client->syswrite($buffer); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
209 |
1105
a073a545413d
Tests: stream upstream tests for fast peer recovery.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1026
diff
changeset
|
210 return $close; |
556
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 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
213 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
214 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 sub log2c { Test::Nginx::log_core('||', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
216 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
217 ############################################################################### |