changeset 935:25a4b2fdd3fb

Tests: I/O timeout options introduced in Stream. Some tests wait for unreachable response for 5 seconds before timeout that lead to unnecessary delay.
author Andrey Zelenkov <zelenkov@nginx.com>
date Tue, 24 May 2016 12:58:26 +0300
parents d5762cd27ad9
children e81cacf44cac
files lib/Test/Nginx/Stream.pm stream_udp_limit_conn.t stream_udp_proxy.t
diffstat 3 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lib/Test/Nginx/Stream.pm
+++ b/lib/Test/Nginx/Stream.pm
@@ -58,13 +58,13 @@ sub new {
 }
 
 sub write {
-	my ($self, $message) = @_;
+	my ($self, $message, %extra) = @_;
 	my $s = $self->{_socket};
 
 	local $SIG{PIPE} = 'IGNORE';
 
 	$s->blocking(0);
-	while (IO::Select->new($s)->can_write(1.5)) {
+	while (IO::Select->new($s)->can_write($extra{write_timeout} || 1.5)) {
 		my $n = $s->syswrite($message);
 		log_out(substr($message, 0, $n));
 		last unless $n;
@@ -79,13 +79,13 @@ sub write {
 }
 
 sub read {
-	my ($self) = @_;
+	my ($self, %extra) = @_;
 	my ($s, $buf);
 
 	$s = $self->{_socket};
 
 	$s->blocking(0);
-	if (IO::Select->new($s)->can_read(5)) {
+	if (IO::Select->new($s)->can_read($extra{read_timeout} || 5)) {
 		$s->sysread($buf, 1024);
 	};
 
@@ -103,13 +103,13 @@ sub io {
 	$read = 1 if !defined $read
 		&& $self->{_socket}->socktype() == &SOCK_DGRAM;
 
-	$self->write($data);
+	$self->write($data, %extra);
 
 	$data = '';
 	while (1) {
 		last if defined $read && --$read < 0;
 
-		my $buf = $self->read();
+		my $buf = $self->read(%extra);
 		last unless defined $buf and length($buf);
 
 		$data .= $buf;
--- a/stream_udp_limit_conn.t
+++ b/stream_udp_limit_conn.t
@@ -87,18 +87,22 @@ my $s = dgram('127.0.0.1:8081');
 
 is($s->io('1'), '1', 'passed');
 
-is(dgram('127.0.0.1:8081')->io('1'), '', 'rejected same zone');
+is(dgram('127.0.0.1:8081')->io('1', read_timeout => 0.1), '',
+	'rejected same zone');
 is(dgram('127.0.0.1:8082')->io('1'), '1', 'passed different zone');
 is(dgram('127.0.0.1:8083')->io('1'), '1', 'passed same zone unlimited');
 
-is($s->io('2', read => 2), '12', 'long connection');
+sleep 1;	# waiting for proxy_timeout to expire
+
+is($s->io('2', read => 2), '12', 'new connection after proxy_timeout');
 
 is(dgram('127.0.0.1:8081')->io('2', read => 2), '12', 'passed 2');
 
 # zones proxy chain
 
 is(dgram('127.0.0.1:8084')->io('1'), '1', 'passed proxy');
-is(dgram('127.0.0.1:8085')->io('1'), '', 'rejected proxy');
+is(dgram('127.0.0.1:8085')->io('1', read_timeout => 0.1), '',
+	'rejected proxy');
 
 ###############################################################################
 
--- a/stream_udp_proxy.t
+++ b/stream_udp_proxy.t
@@ -65,12 +65,12 @@ EOF
 ###############################################################################
 
 my $s = dgram('127.0.0.1:8080');
-is($s->io('1', read => 1), '', 'proxy responses 0');
+is($s->io('1', read => 1, read_timeout => 0.5), '', 'proxy responses 0');
 
 $s = dgram('127.0.0.1:8082');
 is($s->io('1'), '1', 'proxy responses 1');
 is($s->io('2', read => 2), '12', 'proxy responses 2');
-is($s->io('3', read => 3), '12', 'proxy responses 3');
+is($s->io('3', read => 3, read_timeout => 0.5), '12', 'proxy responses 3');
 
 $s = dgram('127.0.0.1:8083');
 is($s->io('3', read => 3), '123', 'proxy responses default');