Mercurial > hg > nginx-tests
comparison stream_upstream.t @ 1105:a073a545413d
Tests: stream upstream tests for fast peer recovery.
Now, a peer is considered recovered after a successful TCP connection is
established to it. See 54cf51c4f07a for details.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 29 Dec 2016 19:30:29 +0300 |
parents | e74a9342eb96 |
children | 766bcbb632ee |
comparison
equal
deleted
inserted
replaced
1104:b3d5a2f8a00b | 1105:a073a545413d |
---|---|
55 server 127.0.0.1:8084; | 55 server 127.0.0.1:8084; |
56 server 127.0.0.1:8085 weight=2; | 56 server 127.0.0.1:8085 weight=2; |
57 } | 57 } |
58 | 58 |
59 upstream u4 { | 59 upstream u4 { |
60 server 127.0.0.1:8086; | 60 server 127.0.0.1:8086 fail_timeout=1s; |
61 server 127.0.0.1:8084 backup; | 61 server 127.0.0.1:8084 backup; |
62 } | 62 } |
63 | 63 |
64 proxy_connect_timeout 1s; | 64 proxy_connect_timeout 1s; |
65 | 65 |
87 | 87 |
88 EOF | 88 EOF |
89 | 89 |
90 $t->run_daemon(\&stream_daemon, port(8084)); | 90 $t->run_daemon(\&stream_daemon, port(8084)); |
91 $t->run_daemon(\&stream_daemon, port(8085)); | 91 $t->run_daemon(\&stream_daemon, port(8085)); |
92 $t->try_run('no stream access_log')->plan(5); | 92 $t->try_run('no stream access_log')->plan(6); |
93 | 93 |
94 $t->waitforsocket('127.0.0.1:' . port(8084)); | 94 $t->waitforsocket('127.0.0.1:' . port(8084)); |
95 $t->waitforsocket('127.0.0.1:' . port(8085)); | 95 $t->waitforsocket('127.0.0.1:' . port(8085)); |
96 | 96 |
97 ############################################################################### | 97 ############################################################################### |
101 is(many(30, port(8080)), "$port4: 15, $port5: 15", 'balanced'); | 101 is(many(30, port(8080)), "$port4: 15, $port5: 15", 'balanced'); |
102 is(many(30, port(8081)), "$port4: 15, $port5: 15", 'failures'); | 102 is(many(30, port(8081)), "$port4: 15, $port5: 15", 'failures'); |
103 is(many(30, port(8082)), "$port4: 10, $port5: 20", 'weight'); | 103 is(many(30, port(8082)), "$port4: 10, $port5: 20", 'weight'); |
104 is(many(30, port(8083)), "$port4: 30", 'backup'); | 104 is(many(30, port(8083)), "$port4: 30", 'backup'); |
105 | 105 |
106 $t->run_daemon(\&stream_daemon, port(8086)); | |
107 $t->waitforsocket('127.0.0.1:' . port(8086)); | |
108 | |
109 TODO: { | |
110 local $TODO = 'not yet' unless $t->has_version('1.11.8'); | |
111 | |
112 sleep 2; # wait till fail_timeout passes | |
113 is(parallel(30, port(8083)), "$port6: 30", 'recovery'); | |
114 | |
115 } | |
116 | |
106 $t->stop(); | 117 $t->stop(); |
107 | 118 |
108 like($t->read_file('u.log'), qr/127.0.0.1:$port6, 127.0.0.1:$port4!0, 1!0, 4/, | 119 like($t->read_file('u.log'), qr/127.0.0.1:$port6, 127.0.0.1:$port4!0, 1!0, 4/, |
109 'per-upstream variables'); | 120 'per-upstream variables'); |
110 | 121 |
114 my ($count, $port) = @_; | 125 my ($count, $port) = @_; |
115 my (%ports); | 126 my (%ports); |
116 | 127 |
117 for (1 .. $count) { | 128 for (1 .. $count) { |
118 if (stream("127.0.0.1:$port")->io('.') =~ /(\d+)/) { | 129 if (stream("127.0.0.1:$port")->io('.') =~ /(\d+)/) { |
130 $ports{$1} = 0 unless defined $ports{$1}; | |
131 $ports{$1}++; | |
132 } | |
133 } | |
134 | |
135 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports; | |
136 return join ', ', map { $_ . ": " . $ports{$_} } @keys; | |
137 } | |
138 | |
139 sub parallel { | |
140 my ($count, $port) = @_; | |
141 my (%ports, @s); | |
142 | |
143 for (1 .. $count) { | |
144 my $s = stream("127.0.0.1:$port"); | |
145 $s->write('keep'); | |
146 $s->read(); | |
147 push @s, $s; | |
148 } | |
149 | |
150 for (1 .. $count) { | |
151 if ((pop @s)->io('.') =~ /(\d+)/) { | |
119 $ports{$1} = 0 unless defined $ports{$1}; | 152 $ports{$1} = 0 unless defined $ports{$1}; |
120 $ports{$1}++; | 153 $ports{$1}++; |
121 } | 154 } |
122 } | 155 } |
123 | 156 |
165 | 198 |
166 $client->sysread(my $buffer, 65536) or return 1; | 199 $client->sysread(my $buffer, 65536) or return 1; |
167 | 200 |
168 log2i("$client $buffer"); | 201 log2i("$client $buffer"); |
169 | 202 |
203 my $close = $buffer ne 'keep'; | |
170 $buffer = $client->sockport(); | 204 $buffer = $client->sockport(); |
171 | 205 |
172 log2o("$client $buffer"); | 206 log2o("$client $buffer"); |
173 | 207 |
174 $client->syswrite($buffer); | 208 $client->syswrite($buffer); |
175 | 209 |
176 return 1; | 210 return $close; |
177 } | 211 } |
178 | 212 |
179 sub log2i { Test::Nginx::log_core('|| <<', @_); } | 213 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
180 sub log2o { Test::Nginx::log_core('|| >>', @_); } | 214 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
181 sub log2c { Test::Nginx::log_core('||', @_); } | 215 sub log2c { Test::Nginx::log_core('||', @_); } |