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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################