Mercurial > hg > nginx-tests
comparison stream_tcp_nodelay.t @ 816:77359b849cd5
Tests: stream package.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Mon, 20 Jul 2015 15:06:09 +0300 |
parents | acec03d44976 |
children | 940757cf34f5 |
comparison
equal
deleted
inserted
replaced
815:9f5f604a840e | 816:77359b849cd5 |
---|---|
17 | 17 |
18 BEGIN { use FindBin; chdir($FindBin::Bin); } | 18 BEGIN { use FindBin; chdir($FindBin::Bin); } |
19 | 19 |
20 use lib 'lib'; | 20 use lib 'lib'; |
21 use Test::Nginx; | 21 use Test::Nginx; |
22 use Test::Nginx::Stream qw/ stream /; | |
22 | 23 |
23 ############################################################################### | 24 ############################################################################### |
24 | 25 |
25 select STDERR; $| = 1; | 26 select STDERR; $| = 1; |
26 select STDOUT; $| = 1; | 27 select STDOUT; $| = 1; |
60 $t->run()->waitforsocket('127.0.0.1:8080'); | 61 $t->run()->waitforsocket('127.0.0.1:8080'); |
61 | 62 |
62 ############################################################################### | 63 ############################################################################### |
63 | 64 |
64 my $str = '1234567890' x 10 . 'F'; | 65 my $str = '1234567890' x 10 . 'F'; |
66 my $length = length($str); | |
65 | 67 |
66 is(stream_get($str, '127.0.0.1:8081'), $str, 'tcp_nodelay off'); | 68 is(stream('127.0.0.1:8081')->io($str, length => $length), $str, |
67 is(stream_get($str, '127.0.0.1:8082'), $str, 'tcp_nodelay on'); | 69 'tcp_nodelay off'); |
68 | 70 is(stream('127.0.0.1:8082')->io($str, length => $length), $str, |
69 ############################################################################### | 71 'tcp_nodelay on'); |
70 | |
71 sub stream_get { | |
72 my ($data, $peer) = @_; | |
73 my $data_length = length $data; | |
74 | |
75 my $s = stream_connect($peer); | |
76 stream_write($s, $data); | |
77 | |
78 $data = ''; | |
79 while (length $data < $data_length) { | |
80 my $buf = stream_read($s); | |
81 $data .= $buf; | |
82 } | |
83 return $data; | |
84 } | |
85 | |
86 sub stream_connect { | |
87 my $peer = shift; | |
88 my $s = IO::Socket::INET->new( | |
89 Proto => 'tcp', | |
90 PeerAddr => $peer || '127.0.0.1:8080' | |
91 ) | |
92 or die "Can't connect to nginx: $!\n"; | |
93 | |
94 return $s; | |
95 } | |
96 | |
97 sub stream_write { | |
98 my ($s, $message) = @_; | |
99 | |
100 local $SIG{PIPE} = 'IGNORE'; | |
101 | |
102 $s->blocking(0); | |
103 while (IO::Select->new($s)->can_write(1.5)) { | |
104 my $n = $s->syswrite($message); | |
105 last unless $n; | |
106 $message = substr($message, $n); | |
107 last unless length $message; | |
108 } | |
109 | |
110 if (length $message) { | |
111 $s->close(); | |
112 } | |
113 } | |
114 | |
115 sub stream_read { | |
116 my ($s) = @_; | |
117 my ($buf); | |
118 | |
119 $s->blocking(0); | |
120 if (IO::Select->new($s)->can_read(5)) { | |
121 $s->sysread($buf, 1024); | |
122 }; | |
123 | |
124 log_in($buf); | |
125 return $buf; | |
126 } | |
127 | 72 |
128 ############################################################################### | 73 ############################################################################### |
129 | 74 |
130 sub stream_daemon { | 75 sub stream_daemon { |
131 my $server = IO::Socket::INET->new( | 76 my $server = IO::Socket::INET->new( |