Mercurial > hg > nginx-tests
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 |
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 | 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 | 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 ############################################################################### |