On Mon, Jul 15, 2024 at 03:01:15PM +0300, Oksana Deeva wrote: > # HG changeset patch > # User Oksana Deeva <o.de...@wbsrv.ru> > # Date 1721044584 -10800 > # Mon Jul 15 14:56:24 2024 +0300 > # Node ID 50fc19b32628b1c5a2a49c127b013e15e4083dd6 > # Parent 0e9c1a8aa1d49e57b211e2c8ece94e00bf032ed7 > Tests: stream_udp_proxy_requests adjusted. > > The test occasionally failed due to the fact that the order of packets > could change. Now the order of packets will be ignored. > > diff -r 0e9c1a8aa1d4 -r 50fc19b32628 stream_udp_proxy_requests.t > --- a/stream_udp_proxy_requests.t Fri Jul 12 01:19:15 2024 +0400 > +++ b/stream_udp_proxy_requests.t Mon Jul 15 14:56:24 2024 +0300 > @@ -160,14 +160,23 @@ > > $s = dgram('127.0.0.1:' . port(8985)); > $s->write('1') for 1 .. 5; > -$b = join ' ', map { $s->read() } (1 .. 10); > + > +my @parts = map { $s->read() } (1 .. 10); > + > +my $res = {}; > +for (my $i = 0; $i < scalar @parts; $i++) { > + my $part = $parts[$i]; > > -SKIP: { > -skip 'session could early terminate', 1 unless $ENV{TEST_NGINX_UNSAFE}; > + if ($i % 2 == 0) { > + $res->{$part} //= 0; > + } else { > + $res->{$parts[$i-1]} += $part;
Due to use of the relative order, this won't solve a perfectly out-of-order sequence. Rather, it may be fixed by introducing sequence numbers: # HG changeset patch # User Sergey Kandaurov <pluk...@nginx.com> # Date 1721223063 -14400 # Wed Jul 17 17:31:03 2024 +0400 # Node ID 64d10bdcce5e4a8b6294c26fdcf4ff9f9a42cac2 # Parent b5ddbcf2fbb4d26712b5825ef660ebea30eacd8d Tests: stream_udp_proxy_requests adjusted. The test occasionally failed due to the fact that the order of packets could change. The fix is to introduce sequence numbers. Inspired by Oksana Deeva. diff --git a/stream_udp_proxy_requests.t b/stream_udp_proxy_requests.t --- a/stream_udp_proxy_requests.t +++ b/stream_udp_proxy_requests.t @@ -76,7 +76,7 @@ stream { server { listen 127.0.0.1:%%PORT_8985_UDP%% udp; - proxy_pass 127.0.0.1:%%PORT_8990_UDP%%; + proxy_pass 127.0.0.1:%%PORT_8991_UDP%%; proxy_requests 2; proxy_responses 2; @@ -150,24 +150,16 @@ is($s->read(), '1', 'requests unset foll # expects all packets proxied from backend, the last (uneven) session succeed $s = dgram('127.0.0.1:' . port(8984)); -$s->write('2') for 1 .. 5; -my $b = join ' ', map { $s->read() } (1 .. 15); -like($b, qr/^(\d+ 1 2) \1 (?!\1)(\d+ 1 2) \2 (?!\2)\d+ 1 2$/, 'slow backend'); +like(many($s, '2', 5, 15), + qr/^(\d+ 1 2) \1 (?!\1)(\d+ 1 2) \2 (?!\2)\d+ 1 2$/, 'slow backend'); # proxy_requests 2, proxy_responses 2 # client sends 5 packets, each responded with 2 packets # expects all packets proxied from backend, the last (uneven) session succeed $s = dgram('127.0.0.1:' . port(8985)); -$s->write('1') for 1 .. 5; -$b = join ' ', map { $s->read() } (1 .. 10); - -SKIP: { -skip 'session could early terminate', 1 unless $ENV{TEST_NGINX_UNSAFE}; - -like($b, qr/^(\d+ 1) \1 (?!\1)(\d+ 1) \2 (?!\2)\d+ 1$/, 'requests - responses'); - -} +like(many($s, '1', 5, 10), + qr/^(\d+ 1) \1 (?!\1)(\d+ 1) \2 (?!\2)\d+ 1$/, 'requests - responses'); $t->stop(); @@ -185,6 +177,17 @@ EOF ############################################################################### +sub many { + my ($s, $buf, $wcount, $rcount) = @_; + + $s->write($buf) for 1 .. $wcount; + join ' ', map { $_->[1] } + sort { $a->[0] <=> $b->[0] } + map { [ $s->read() =~ /^(\d+) (.+)/ ] } 1 .. $rcount; +} + +############################################################################### + sub udp_daemon { my ($t, $port) = @_; @@ -200,14 +203,14 @@ sub udp_daemon { open my $fh, '>', $t->testdir() . "/$port"; close $fh; - my $slp = 1 if $port == port(8991); + my ($slp, $i) = (1, 1) if $port == port(8991); while (1) { $server->recv(my $buffer, 65536); sleep 1, $slp = 0 if $slp; - $server->send($server->peerport()); - $server->send($_) for (1 .. $buffer); + $server->send(($i ? "${\($i++)} " : "") . $server->peerport()); + $server->send(($i ? "${\($i++)} " : "") . $_) for (1..$buffer); } } > + } > +} > > -like($b, qr/^(\d+ 1) \1 (?!\1)(\d+ 1) \2 (?!\2)\d+ 1$/, 'requests - > responses'); > +$b = join ' ', sort values %$res; > > -} > +is($b, '1 2 2', 'requests - responses'); > > $t->stop(); > _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel