annotate proxy_upgrade.t @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents fc6b8270469c
children 5276aceb32a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy upgrade support. In contrast to proxy_websocket.t
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 # this test doesn't try to use binary WebSocket protocol, but uses simple
368
fc6b8270469c Tests: fixed typos.
Sergey Kandaurov <pluknet@nginx.com>
parents: 343
diff changeset
7 # plain text protocol instead.
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 use warnings;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use strict;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use Test::More;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use IO::Poll;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use IO::Select;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use IO::Socket::INET;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 use Socket qw/ CRLF /;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 BEGIN { use FindBin; chdir($FindBin::Bin); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 use lib 'lib';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 use Test::Nginx;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 select STDERR; $| = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 select STDOUT; $| = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 my $t = Test::Nginx->new()->has(qw/http proxy/)
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
32 ->write_file_expand('nginx.conf', <<'EOF')->plan(27);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 %%TEST_GLOBALS%%
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 daemon off;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 events {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 http {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 %%TEST_GLOBALS_HTTP%%
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 listen 127.0.0.1:8080;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server_name localhost;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 location / {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 proxy_pass http://127.0.0.1:8081;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 proxy_http_version 1.1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 proxy_set_header Upgrade $http_upgrade;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 proxy_set_header Connection "Upgrade";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_read_timeout 2s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 send_timeout 2s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 EOF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 $t->run_daemon(\&upgrade_fake_daemon);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 $t->run();
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
274
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
64 $t->waitforsocket('127.0.0.1:8081')
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
65 or die "Can't start test backend";
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
66
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 # establish connection
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 my $s = upgrade_connect();
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 ok($s, "handshake");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 skip "handshake failed", 22 unless $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 # send a frame
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 upgrade_write($s, 'foo');
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 is(upgrade_read($s), 'bar', "upgrade response");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 # send some big frame
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 upgrade_write($s, 'foo' x 16384);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 like(upgrade_read($s), qr/^(bar){16384}$/, "upgrade big response");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 # send multiple frames
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 for my $i (1 .. 10) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 upgrade_write($s, ('foo' x 16384) . $i);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 upgrade_write($s, 'bazz' . $i);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 for my $i (1 .. 10) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 like(upgrade_read($s), qr/^(bar){16384}\d+$/, "upgrade $i");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 is(upgrade_read($s), 'bazz' . $i, "upgrade small $i");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 # establish connection with some pipelined data
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 # and make sure they are correctly passed upstream
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 undef $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 $s = upgrade_connect(message => "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 ok($s, "handshake pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 skip "handshake failed", 2 unless $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 is(upgrade_read($s), "bar", "response pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 upgrade_write($s, "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 is(upgrade_read($s), "bar", "next to pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 # connection should not be upgraded unless upgrade was actually
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 # requested and allowed by configuration
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
317
a9621dbbd0d4 Tests: remove TODOs with 1.3.x version checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 280
diff changeset
119 undef $s;
a9621dbbd0d4 Tests: remove TODOs with 1.3.x version checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 280
diff changeset
120 $s = upgrade_connect(noheader => 1);
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
121 ok(!$s, "handshake noupgrade");
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 sub upgrade_connect {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 my (%opts) = @_;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 my $s = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 Proto => 'tcp',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 PeerAddr => '127.0.0.1:8080'
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 )
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 or die "Can't connect to nginx: $!\n";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 # send request, $h->to_string
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 my $buf = "GET / HTTP/1.1" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 . "Host: localhost" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 . ($opts{noheader} ? '' : "Upgrade: foo" . CRLF)
368
fc6b8270469c Tests: fixed typos.
Sergey Kandaurov <pluknet@nginx.com>
parents: 343
diff changeset
139 . "Connection: Upgrade" . CRLF . CRLF;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 $buf .= $opts{message} . CRLF if defined $opts{message};
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 local $SIG{PIPE} = 'IGNORE';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 log_out($buf);
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
146 $s->syswrite($buf);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 # read response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 my $got = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 $buf = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 while (1) {
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
154 $buf = upgrade_getline($s);
280
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
155 last unless defined $buf and length $buf;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 log_in($buf);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 $got .= $buf;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 # parse server response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
163 return if $got !~ m!HTTP/1.1 101!;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
164
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
165 # make sure next line is "handshaked"
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
166
280
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
167 $buf = upgrade_read($s);
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
168
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
169 return if !defined $buf or $buf ne 'handshaked';
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
170 return $s;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
171 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
172
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
173 sub upgrade_getline {
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
174 my ($s) = @_;
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
175 my ($h, $buf, $line);
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
176
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
177 ${*$s}->{_upgrade_private} ||= { b => ''};
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
178 $h = ${*$s}->{_upgrade_private};
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
179
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
180 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
181 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
182 return $1;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
183 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
184
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
185 $s->blocking(0);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
186 while (IO::Select->new($s)->can_read(1.5)) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
187 my $n = $s->sysread($buf, 1024);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
188 last unless $n;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
189
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
190 $h->{b} .= $buf;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
191
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
192 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
193 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
194 return $1;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
195 }
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
196 };
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 sub upgrade_write {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 my ($s, $message) = @_;
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
201
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
202 $message = $message . CRLF;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
203
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
204 local $SIG{PIPE} = 'IGNORE';
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
205
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
206 $s->blocking(0);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
207 while (IO::Select->new($s)->can_write(1.5)) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
208 my $n = $s->syswrite($message);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
209 last unless $n;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
210 $message = substr($message, $n);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
211 last unless length $message;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
212 }
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
213
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
214 if (length $message) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
215 $s->close();
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
216 }
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 sub upgrade_read {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 my ($s) = @_;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
221 my $m = upgrade_getline($s);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 $m =~ s/\x0d?\x0a// if defined $m;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
223 log_in($m);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 return $m;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 sub upgrade_fake_daemon {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 my $server = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 Proto => 'tcp',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 LocalAddr => '127.0.0.1:8081',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 Listen => 5,
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 Reuse => 1
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 )
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 or die "Can't create listening socket: $!\n";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 while (my $client = $server->accept()) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 upgrade_handle_client($client);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 sub upgrade_handle_client {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 my ($client) = @_;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 $client->autoflush(1);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 $client->blocking(0);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 my $poll = IO::Poll->new;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 my $handshake = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 my $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 my $buffer = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 my $n;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 log2c("(new connection $client)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 while (1) {
343
e7dc8f4d0a4b Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
259 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 my $p = $poll->poll(0.5);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 log2c("(poll $p)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 foreach my $reader ($poll->handles(POLLIN)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 $n = $client->sysread(my $chunk, 65536);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 return unless $n;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 log2i($chunk);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 if ($handshake) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 $buffer .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 next unless $buffer =~ /\x0d?\x0a\x0d?\x0a$/;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 log2c("(handshake done)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 $handshake = 0;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 $buffer = 'HTTP/1.1 101 Switching' . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 . 'Upgrade: foo' . CRLF
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
278 . 'Connection: Upgrade' . CRLF . CRLF
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
279 . 'handshaked' . CRLF;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
280
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
281 log2o($buffer);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 next;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 $unfinished .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 if ($unfinished =~ m/\x0d?\x0a\z/) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 $unfinished =~ s/foo/bar/g;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
290 log2o($unfinished);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 $buffer .= $unfinished;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 foreach my $writer ($poll->handles(POLLOUT)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 next unless length $buffer;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 $n = $writer->syswrite($buffer);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 substr $buffer, 0, $n, '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
304 sub log2i { Test::Nginx::log_core('|| <<', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
305 sub log2o { Test::Nginx::log_core('|| >>', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 sub log2c { Test::Nginx::log_core('||', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
307
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308 ###############################################################################