annotate proxy_upgrade.t @ 289:cbd4f6eca676

Tests: check if started process is alive while starting nginx. This allows faster test execution in case of startup failures, e.g. due to configuration errors. Note that just adding waitpid() to waitforfile() causes hang on win32 in wait(). To fix this, wait() calls were changed to waitpid() with pid specified.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 27 May 2013 17:15:17 +0400
parents 3dd8c7acf3ad
children a9621dbbd0d4
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 # plain text protol instead.
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 TODO: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 local $TODO = 'not yet' unless $t->has_version('1.3.13');
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 # establish connection
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 my $s = upgrade_connect();
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 ok($s, "handshake");
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 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 skip "handshake failed", 22 unless $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 # send a frame
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 upgrade_write($s, 'foo');
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 is(upgrade_read($s), 'bar', "upgrade response");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 # send some big frame
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 upgrade_write($s, 'foo' x 16384);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 like(upgrade_read($s), qr/^(bar){16384}$/, "upgrade big response");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 # send multiple frames
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 for my $i (1 .. 10) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 upgrade_write($s, ('foo' x 16384) . $i);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 upgrade_write($s, 'bazz' . $i);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 for my $i (1 .. 10) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 like(upgrade_read($s), qr/^(bar){16384}\d+$/, "upgrade $i");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 is(upgrade_read($s), 'bazz' . $i, "upgrade small $i");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 }
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 # establish connection with some pipelined data
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 # and make sure they are correctly passed upstream
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 undef $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 $s = upgrade_connect(message => "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 ok($s, "handshake pipelined");
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 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 skip "handshake failed", 2 unless $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 is(upgrade_read($s), "bar", "response 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 upgrade_write($s, "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 is(upgrade_read($s), "bar", "next to pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
119 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
120
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 # connection should not be upgraded unless upgrade was actually
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 # requested and allowed by configuration
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
124 my $s = upgrade_connect(noheader => 1);
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
125 ok(!$s, "handshake noupgrade");
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 sub upgrade_connect {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 my (%opts) = @_;
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 my $s = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 Proto => 'tcp',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 PeerAddr => '127.0.0.1:8080'
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 or die "Can't connect to nginx: $!\n";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 # send request, $h->to_string
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 my $buf = "GET / HTTP/1.1" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 . "Host: localhost" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 . ($opts{noheader} ? '' : "Upgrade: foo" . CRLF)
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 . "Connection: Upgade" . CRLF . CRLF;
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 $buf .= $opts{message} . CRLF if defined $opts{message};
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 local $SIG{PIPE} = 'IGNORE';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 log_out($buf);
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
150 $s->syswrite($buf);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 # read response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 my $got = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 $buf = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 while (1) {
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
158 $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
159 last unless defined $buf and length $buf;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 log_in($buf);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 $got .= $buf;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 # parse server response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
167 return if $got !~ m!HTTP/1.1 101!;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
168
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
169 # make sure next line is "handshaked"
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
170
280
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
171 $buf = upgrade_read($s);
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
172
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
173 return if !defined $buf or $buf ne 'handshaked';
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
174 return $s;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
175 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
176
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
177 sub upgrade_getline {
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
178 my ($s) = @_;
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
179 my ($h, $buf, $line);
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
180
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
181 ${*$s}->{_upgrade_private} ||= { b => ''};
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
182 $h = ${*$s}->{_upgrade_private};
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
183
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
184 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
185 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
186 return $1;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
187 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
188
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
189 $s->blocking(0);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
190 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
191 my $n = $s->sysread($buf, 1024);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
192 last unless $n;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
193
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
194 $h->{b} .= $buf;
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 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
197 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
198 return $1;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
199 }
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
200 };
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 sub upgrade_write {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 my ($s, $message) = @_;
279
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 $message = $message . CRLF;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
207
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
208 local $SIG{PIPE} = 'IGNORE';
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
209
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
210 $s->blocking(0);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
211 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
212 my $n = $s->syswrite($message);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
213 last unless $n;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
214 $message = substr($message, $n);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
215 last unless length $message;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
216 }
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
217
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
218 if (length $message) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
219 $s->close();
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
220 }
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 sub upgrade_read {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 my ($s) = @_;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
225 my $m = upgrade_getline($s);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 $m =~ s/\x0d?\x0a// if defined $m;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
227 log_in($m);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 return $m;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 ###############################################################################
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 sub upgrade_fake_daemon {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 my $server = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 Proto => 'tcp',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 LocalAddr => '127.0.0.1:8081',
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 Listen => 5,
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 Reuse => 1
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 )
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 or die "Can't create listening socket: $!\n";
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 while (my $client = $server->accept()) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 upgrade_handle_client($client);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 }
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 sub upgrade_handle_client {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 my ($client) = @_;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 $client->autoflush(1);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 $client->blocking(0);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 my $poll = IO::Poll->new;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 my $handshake = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 my $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 my $buffer = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 my $n;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 log2c("(new connection $client)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 while (1) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 my $p = $poll->poll(0.5);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 log2c("(poll $p)");
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 foreach my $reader ($poll->handles(POLLIN)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 $n = $client->sysread(my $chunk, 65536);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 return unless $n;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 log2i($chunk);
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 if ($handshake) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 $buffer .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 next unless $buffer =~ /\x0d?\x0a\x0d?\x0a$/;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 log2c("(handshake done)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 $handshake = 0;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280 $buffer = 'HTTP/1.1 101 Switching' . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 . 'Upgrade: foo' . CRLF
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
282 . 'Connection: Upgrade' . CRLF . CRLF
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
283 . 'handshaked' . CRLF;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
284
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
285 log2o($buffer);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 next;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290 $unfinished .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 if ($unfinished =~ m/\x0d?\x0a\z/) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 $unfinished =~ s/foo/bar/g;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
294 log2o($unfinished);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 $buffer .= $unfinished;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 foreach my $writer ($poll->handles(POLLOUT)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301 next unless length $buffer;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 $n = $writer->syswrite($buffer);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303 substr $buffer, 0, $n, '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
304 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
305 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 }
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 sub log2i { Test::Nginx::log_core('|| <<', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
309 sub log2o { Test::Nginx::log_core('|| >>', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
310 sub log2c { Test::Nginx::log_core('||', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
311
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312 ###############################################################################