Mercurial > hg > nginx-tests
comparison lib/Test/Nginx/Stream.pm @ 868:d2cb9ed7412e
Tests: stream udp tests.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Tue, 15 Mar 2016 16:20:29 +0300 |
parents | 77359b849cd5 |
children | c380b4b7e2e4 |
comparison
equal
deleted
inserted
replaced
867:89898b20f258 | 868:d2cb9ed7412e |
---|---|
9 | 9 |
10 use warnings; | 10 use warnings; |
11 use strict; | 11 use strict; |
12 | 12 |
13 use base qw/ Exporter /; | 13 use base qw/ Exporter /; |
14 our @EXPORT_OK = qw/ stream /; | 14 our @EXPORT_OK = qw/ stream dgram /; |
15 | 15 |
16 use Test::More qw//; | 16 use Test::More qw//; |
17 use IO::Select; | 17 use IO::Select; |
18 use IO::Socket; | 18 use IO::Socket; |
19 | 19 |
20 use Test::Nginx; | 20 use Test::Nginx; |
21 | 21 |
22 sub stream { | 22 sub stream { |
23 return Test::Nginx::Stream->new(@_); | 23 return Test::Nginx::Stream->new(@_); |
24 } | |
25 | |
26 sub dgram { | |
27 unshift(@_, "PeerAddr") if @_ == 1; | |
28 | |
29 return Test::Nginx::Stream->new( | |
30 Proto => "udp", | |
31 PeerAddr => '127.0.0.1:8080', | |
32 @_ | |
33 ); | |
24 } | 34 } |
25 | 35 |
26 sub new { | 36 sub new { |
27 my $self = {}; | 37 my $self = {}; |
28 bless $self, shift @_; | 38 bless $self, shift @_; |
86 sub io { | 96 sub io { |
87 my $self = shift; | 97 my $self = shift; |
88 | 98 |
89 my ($data, %extra) = @_; | 99 my ($data, %extra) = @_; |
90 my $length = $extra{length}; | 100 my $length = $extra{length}; |
101 my $read = $extra{read}; | |
102 | |
103 $read = 1 if !defined $read | |
104 && $self->{_socket}->socktype() == &SOCK_DGRAM; | |
91 | 105 |
92 $self->write($data); | 106 $self->write($data); |
93 | 107 |
94 $data = ''; | 108 $data = ''; |
95 while (1) { | 109 while (1) { |
110 last if defined $read && --$read < 0; | |
111 | |
96 my $buf = $self->read(); | 112 my $buf = $self->read(); |
97 last unless length($buf); | 113 last unless length($buf); |
98 | 114 |
99 $data .= $buf; | 115 $data .= $buf; |
100 last if defined $length && length($data) >= $length; | 116 last if defined $length && length($data) >= $length; |