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('||', @_); }