Mercurial > hg > nginx-tests
annotate stream_upstream.t @ 1021:ebdf239722b9
Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris.
Assumed that the order of responses being arrived in nolock case may be ignored.
An important part of such case is that the only last response should be cached.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 02 Sep 2016 12:17:35 +0300 |
parents | 882267679006 |
children | e74a9342eb96 |
rev | line source |
---|---|
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Stream tests for upstream module and balancers. |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 use IO::Select; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
816
77359b849cd5
Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
711
diff
changeset
|
21 use Test::Nginx::Stream qw/ stream /; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 select STDERR; $| = 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 select STDOUT; $| = 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 my $t = Test::Nginx->new()->has(qw/stream/)->plan(4) |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 ->write_file_expand('nginx.conf', <<'EOF'); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 %%TEST_GLOBALS%% |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 daemon off; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 events { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 stream { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 upstream u { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
40 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
41 server 127.0.0.1:8085; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 upstream u2 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
45 server 127.0.0.1:8086 down; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
46 server 127.0.0.1:8086; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
47 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
48 server 127.0.0.1:8085; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 upstream u3 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
52 server 127.0.0.1:8084; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
53 server 127.0.0.1:8085 weight=2; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 upstream u4 { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
57 server 127.0.0.1:8086; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
58 server 127.0.0.1:8084 backup; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 |
561
cd3e32d9997e
Tests: adjusted stream test timeouts, visible on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
556
diff
changeset
|
61 proxy_connect_timeout 1s; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
64 listen 127.0.0.1:8080; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 proxy_pass u; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
69 listen 127.0.0.1:8081; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 proxy_pass u2; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
74 listen 127.0.0.1:8082; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 proxy_pass u3; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
79 listen 127.0.0.1:8083; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 proxy_pass u4; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 EOF |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
86 $t->run_daemon(\&stream_daemon, port(8084)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
87 $t->run_daemon(\&stream_daemon, port(8085)); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 $t->run(); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
90 $t->waitforsocket('127.0.0.1:' . port(8084)); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
91 $t->waitforsocket('127.0.0.1:' . port(8085)); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
95 my @ports = my ($port4, $port5) = (port(8084), port(8085)); |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
96 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
97 is(many(30, port(8080)), "$port4: 15, $port5: 15", 'balanced'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
98 is(many(30, port(8081)), "$port4: 15, $port5: 15", 'failures'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
99 is(many(30, port(8082)), "$port4: 10, $port5: 20", 'weight'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
100 is(many(30, port(8083)), "$port4: 30", 'backup'); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 sub many { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
105 my ($count, $port) = @_; |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
106 my (%ports); |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 for (1 .. $count) { |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
109 if (stream("127.0.0.1:$port")->io('.') =~ /(\d+)/) { |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 $ports{$1} = 0 unless defined $ports{$1}; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 $ports{$1}++; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
115 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports; |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
816
diff
changeset
|
116 return join ', ', map { $_ . ": " . $ports{$_} } @keys; |
556
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 ############################################################################### |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 sub stream_daemon { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 my ($port) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 my $server = IO::Socket::INET->new( |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 Proto => 'tcp', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 LocalAddr => '127.0.0.1', |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 LocalPort => $port, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 Listen => 5, |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 Reuse => 1 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 ) |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 or die "Can't create listening socket: $!\n"; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 my $sel = IO::Select->new($server); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 local $SIG{PIPE} = 'IGNORE'; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 while (my @ready = $sel->can_read) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 foreach my $fh (@ready) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 if ($server == $fh) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 my $new = $fh->accept; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
141 $new->autoflush(1); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 $sel->add($new); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 } elsif (stream_handle_client($fh)) { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 $sel->remove($fh); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 $fh->close; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 sub stream_handle_client { |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 my ($client) = @_; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 log2c("(new connection $client)"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 $client->sysread(my $buffer, 65536) or return 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 log2i("$client $buffer"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 $buffer = $client->sockport(); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 log2o("$client $buffer"); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 $client->syswrite($buffer); |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 return 1; |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 sub log2c { Test::Nginx::log_core('||', @_); } |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 |
97d89d9ab4ed
Tests: basic stream upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 ############################################################################### |