Mercurial > hg > nginx-tests
diff stream_limit_rate.t @ 816:77359b849cd5
Tests: stream package.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Mon, 20 Jul 2015 15:06:09 +0300 |
parents | a53c310c695d |
children | 5048b8f0fedd |
line wrap: on
line diff
--- a/stream_limit_rate.t +++ b/stream_limit_rate.t @@ -18,6 +18,7 @@ BEGIN { use FindBin; chdir($FindBin::Bin use lib 'lib'; use Test::Nginx; +use Test::Nginx::Stream qw/ stream /; ############################################################################### @@ -95,10 +96,10 @@ EOF my $str = '1234567890' x 100; -my %r = stream_get($str, peer => '127.0.0.1:8081'); +my %r = response($str, peer => '127.0.0.1:8081'); is($r{'data'}, $str, 'exact limit'); -%r = stream_get($str, peer => '127.0.0.1:8082'); +%r = response($str, peer => '127.0.0.1:8082'); is($r{'data'}, $str, 'unlimited'); SKIP: { @@ -107,10 +108,10 @@ skip 'unsafe on VM', 2 unless $ENV{TEST_ # if interaction between backend and client is slow then proxy can add extra # bytes to upload/download data -%r = stream_get($str, peer => '127.0.0.1:8083', readonce => 1); +%r = response($str, peer => '127.0.0.1:8083', readonce => 1); is($r{'data'}, '1', 'download - one byte'); -%r = stream_get($str, peer => '127.0.0.1:8084'); +%r = response($str, peer => '127.0.0.1:8084'); is($r{'data'}, '1', 'upload - one byte'); } @@ -119,75 +120,37 @@ is($r{'data'}, '1', 'upload - one byte') # the first four chunks are quarters of test string # and the fifth one is some extra data from backend. -%r = stream_get($str, peer => '127.0.0.1:8085'); +%r = response($str, peer => '127.0.0.1:8085'); my $diff = time() - $r{'time'}; cmp_ok($diff, '>=', 4, 'download - time'); is($r{'data'}, $str, 'download - data'); my $time = time(); -%r = stream_get($str . 'close', peer => '127.0.0.1:8086'); +%r = response($str . 'close', peer => '127.0.0.1:8086'); $diff = time() - $time; cmp_ok($diff, '>=', 4, 'upload - time'); is($r{'data'}, $str . 'close', 'upload - data'); ############################################################################### -sub stream_get { - my ($data, %extra) = @_; +sub response { + my ($data, %extra) = @_; - my $s = stream_connect($extra{'peer'}); - stream_write($s, $data); + my $s = stream($extra{peer}); + $s->write($data); $data = ''; - while (my $buf = stream_read($s)) { + while (1) { + my $buf = $s->read(); + last unless length($buf); + $data .= $buf; + last if $extra{'readonce'}; } $data =~ /([\S]*)\s?(\d+)?/; - return ('data' => $1, 'time' => $2); -} - -sub stream_connect { - my $peer = shift; - my $s = IO::Socket::INET->new( - Proto => 'tcp', - PeerAddr => $peer - ) - or die "Can't connect to nginx: $!\n"; - - return $s; -} - -sub stream_write { - my ($s, $message) = @_; - - local $SIG{PIPE} = 'IGNORE'; - - $s->blocking(0); - while (IO::Select->new($s)->can_write(1.5)) { - my $n = $s->syswrite($message); - last unless $n; - $message = substr($message, $n); - last unless length $message; - } - - if (length $message) { - $s->close(); - } -} - -sub stream_read { - my ($s) = @_; - my ($buf); - - $s->blocking(0); - if (IO::Select->new($s)->can_read(5)) { - $s->sysread($buf, 1024); - }; - - log_in($buf); - return $buf; + return ('data' => $1, 'time' => $2) } ###############################################################################