annotate stream_upstream_hash.t @ 711:824754da4afc

Tests: adjusted socket read timeout in stream tests. Read timeout was increased to prevent situation when data is delayed with more than 3 seconds. In this case, part of the response could be cut off.
author Andrey Zelenkov <zelenkov@nginx.com>
date Wed, 23 Sep 2015 18:29:34 +0300
parents 5c3946ebd867
children 77359b849cd5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
571
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Stream tests for upstream hash balancer module.
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 use IO::Select;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use lib 'lib';
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 ###############################################################################
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/stream stream_upstream_hash/)->plan(2);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 $t->write_file_expand('nginx.conf', <<'EOF');
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 daemon off;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 events {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 stream {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 upstream hash {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 hash $remote_addr;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server 127.0.0.1:8087;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server 127.0.0.1:8088;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 upstream cons {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 hash $remote_addr consistent;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 server 127.0.0.1:8087;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 server 127.0.0.1:8088;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 server {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 listen 127.0.0.1:8081;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 proxy_pass hash;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 server {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 listen 127.0.0.1:8082;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 proxy_pass cons;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 EOF
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 $t->run_daemon(\&stream_daemon, 8087);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 $t->run_daemon(\&stream_daemon, 8088);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 $t->run();
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 $t->waitforsocket('127.0.0.1:8087');
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 $t->waitforsocket('127.0.0.1:8088');
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 ###############################################################################
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 is(many('.', 10, peer => '127.0.0.1:8081'), '8088: 10', 'hash');
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 is(many('.', 10, peer => '127.0.0.1:8082'), '8088: 10', 'hash consistent');
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 ###############################################################################
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 sub many {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 my ($data, $count, %opts) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 my (%ports, $peer);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 $peer = $opts{peer};
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 for (1 .. $count) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 if (stream_get($data, $peer) =~ /(\d+)/) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 $ports{$1} = 0 unless defined $ports{$1};
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 $ports{$1}++;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 sub stream_get {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 my ($data, $peer) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 my $s = stream_connect($peer);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 stream_write($s, $data);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 $data = '';
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 while (my $buf = stream_read($s)) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 $data .= $buf;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 return $data;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 sub stream_connect {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 my $peer = shift;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 my $s = IO::Socket::INET->new(
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 Proto => 'tcp',
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 PeerAddr => $peer || '127.0.0.1:8080'
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 )
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 or die "Can't connect to nginx: $!\n";
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 return $s;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 sub stream_write {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 my ($s, $message) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 local $SIG{PIPE} = 'IGNORE';
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 $s->blocking(0);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 while (IO::Select->new($s)->can_write(1.5)) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 my $n = $s->syswrite($message);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 last unless $n;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 $message = substr($message, $n);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 last unless length $message;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 if (length $message) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 $s->close();
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 sub stream_read {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 my ($s) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 my ($buf);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 $s->blocking(0);
711
824754da4afc Tests: adjusted socket read timeout in stream tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 571
diff changeset
141 if (IO::Select->new($s)->can_read(5)) {
571
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 $s->sysread($buf, 1024);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 };
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 log_in($buf);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 return $buf;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 ###############################################################################
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 sub stream_daemon {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 my ($port) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 my $server = IO::Socket::INET->new(
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 Proto => 'tcp',
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 LocalAddr => '127.0.0.1',
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 LocalPort => $port,
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 Listen => 5,
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 Reuse => 1
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 )
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 or die "Can't create listening socket: $!\n";
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 my $sel = IO::Select->new($server);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 local $SIG{PIPE} = 'IGNORE';
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 while (my @ready = $sel->can_read) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 foreach my $fh (@ready) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 if ($server == $fh) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 my $new = $fh->accept;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 $new->autoflush(1);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 $sel->add($new);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 } elsif (stream_handle_client($fh)) {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 $sel->remove($fh);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $fh->close;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 sub stream_handle_client {
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 my ($client) = @_;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185 log2c("(new connection $client)");
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 $client->sysread(my $buffer, 65536) or return 1;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 log2i("$client $buffer");
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 $buffer = $client->sockport();
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 log2o("$client $buffer");
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 $client->syswrite($buffer);
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 return 1;
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 sub log2i { Test::Nginx::log_core('|| <<', @_); }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 sub log2o { Test::Nginx::log_core('|| >>', @_); }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 sub log2c { Test::Nginx::log_core('||', @_); }
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
5c3946ebd867 Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 ###############################################################################