comparison stream_upstream.t @ 816:77359b849cd5

Tests: stream package.
author Andrey Zelenkov <zelenkov@nginx.com>
date Mon, 20 Jul 2015 15:06:09 +0300
parents 824754da4afc
children e9064d691790
comparison
equal deleted inserted replaced
815:9f5f604a840e 816:77359b849cd5
16 16
17 BEGIN { use FindBin; chdir($FindBin::Bin); } 17 BEGIN { use FindBin; chdir($FindBin::Bin); }
18 18
19 use lib 'lib'; 19 use lib 'lib';
20 use Test::Nginx; 20 use Test::Nginx;
21 use Test::Nginx::Stream qw/ stream /;
21 22
22 ############################################################################### 23 ###############################################################################
23 24
24 select STDERR; $| = 1; 25 select STDERR; $| = 1;
25 select STDOUT; $| = 1; 26 select STDOUT; $| = 1;
103 my (%ports, $peer); 104 my (%ports, $peer);
104 105
105 $peer = $opts{peer}; 106 $peer = $opts{peer};
106 107
107 for (1 .. $count) { 108 for (1 .. $count) {
108 if (stream_get($data, $peer) =~ /(\d+)/) { 109 if (stream($peer)->io($data) =~ /(\d+)/) {
109 $ports{$1} = 0 unless defined $ports{$1}; 110 $ports{$1} = 0 unless defined $ports{$1};
110 $ports{$1}++; 111 $ports{$1}++;
111 } 112 }
112 } 113 }
113 114
114 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports; 115 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
115 }
116
117 sub stream_get {
118 my ($data, $peer) = @_;
119
120 my $s = stream_connect($peer);
121 stream_write($s, $data);
122
123 $data = '';
124 while (my $buf = stream_read($s)) {
125 $data .= $buf;
126 }
127 return $data;
128 }
129
130 sub stream_connect {
131 my $peer = shift;
132 my $s = IO::Socket::INET->new(
133 Proto => 'tcp',
134 PeerAddr => $peer
135 )
136 or die "Can't connect to nginx: $!\n";
137
138 return $s;
139 }
140
141 sub stream_write {
142 my ($s, $message) = @_;
143
144 local $SIG{PIPE} = 'IGNORE';
145
146 $s->blocking(0);
147 while (IO::Select->new($s)->can_write(1.5)) {
148 my $n = $s->syswrite($message);
149 last unless $n;
150 $message = substr($message, $n);
151 last unless length $message;
152 }
153
154 if (length $message) {
155 $s->close();
156 }
157 }
158
159 sub stream_read {
160 my ($s) = @_;
161 my ($buf);
162
163 $s->blocking(0);
164 if (IO::Select->new($s)->can_read(5)) {
165 $s->sysread($buf, 1024);
166 };
167
168 log_in($buf);
169 return $buf;
170 } 116 }
171 117
172 ############################################################################### 118 ###############################################################################
173 119
174 sub stream_daemon { 120 sub stream_daemon {