# HG changeset patch # User Andrey Zelenkov # Date 1464083906 -10800 # Node ID 25a4b2fdd3fbead2cce83593ddf89ba43f78ee1e # Parent d5762cd27ad970df482529fbf4e6d0bdfdb10be4 Tests: I/O timeout options introduced in Stream. Some tests wait for unreachable response for 5 seconds before timeout that lead to unnecessary delay. diff --git a/lib/Test/Nginx/Stream.pm b/lib/Test/Nginx/Stream.pm --- 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; diff --git a/stream_udp_limit_conn.t b/stream_udp_limit_conn.t --- 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'); ############################################################################### diff --git a/stream_udp_proxy.t b/stream_udp_proxy.t --- 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');