annotate proxy_upgrade.t @ 1155:d37983612b04

Tests: adjusted read timeout in proxy upgrade tests for slow hosts.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 28 Mar 2017 17:57:49 +0300
parents 882267679006
children a79bf84726af
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
583
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
5 # Tests for http proxy upgrade support.
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
6 # In contrast to proxy_websocket.t, this test doesn't try to use binary
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
7 # WebSocket protocol, but uses simple 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 Socket qw/ CRLF /;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 BEGIN { use FindBin; chdir($FindBin::Bin); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 use lib 'lib';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 use Test::Nginx;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
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 select STDERR; $| = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 select STDOUT; $| = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 my $t = Test::Nginx->new()->has(qw/http proxy/)
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
31 ->write_file_expand('nginx.conf', <<'EOF')->plan(30);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 %%TEST_GLOBALS%%
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 daemon off;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 events {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 }
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 http {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 %%TEST_GLOBALS_HTTP%%
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
43 log_format test "$bytes_sent $body_bytes_sent";
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
44 access_log %%TESTDIR%%/cc.log test;
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
45
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
47 listen 127.0.0.1:8080;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server_name localhost;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location / {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
51 proxy_pass http://127.0.0.1:8081;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 proxy_http_version 1.1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_set_header Upgrade $http_upgrade;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 proxy_set_header Connection "Upgrade";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 proxy_read_timeout 2s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 send_timeout 2s;
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 }
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 EOF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
63 my $d = $t->testdir();
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
64
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 $t->run_daemon(\&upgrade_fake_daemon);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 $t->run();
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
68 $t->waitforsocket('127.0.0.1:' . port(8081))
274
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
69 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
70
263
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 # establish connection
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
75 my @r;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 my $s = upgrade_connect();
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 ok($s, "handshake");
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 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 skip "handshake failed", 22 unless $s;
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 a 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');
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 is(upgrade_read($s), 'bar', "upgrade 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 some big frame
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 upgrade_write($s, 'foo' x 16384);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 like(upgrade_read($s), qr/^(bar){16384}$/, "upgrade big response");
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 # send multiple frames
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 upgrade_write($s, ('foo' x 16384) . $i);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 upgrade_write($s, 'bazz' . $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 for my $i (1 .. 10) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 like(upgrade_read($s), qr/^(bar){16384}\d+$/, "upgrade $i");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 is(upgrade_read($s), 'bazz' . $i, "upgrade small $i");
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 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
105 push @r, $s ? ${*$s}->{_upgrade_private}->{r} : 'failed';
583
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
106 undef $s;
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
107
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 # establish connection with some pipelined data
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # and make sure they are correctly passed upstream
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 $s = upgrade_connect(message => "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 ok($s, "handshake pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 SKIP: {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 skip "handshake failed", 2 unless $s;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 is(upgrade_read($s), "bar", "response pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 upgrade_write($s, "foo");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 is(upgrade_read($s), "bar", "next to pipelined");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
123 push @r, $s ? ${*$s}->{_upgrade_private}->{r} : 'failed';
583
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
124 undef $s;
5276aceb32a6 Tests: style, no functional changes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 368
diff changeset
125
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 # connection should not be upgraded unless upgrade was actually
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 # requested and allowed by configuration
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128
317
a9621dbbd0d4 Tests: remove TODOs with 1.3.x version checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 280
diff changeset
129 $s = upgrade_connect(noheader => 1);
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
130 ok(!$s, "handshake noupgrade");
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
132 # bytes sent on upgraded connection
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
133 # verify with 1) data actually read by client, 2) expected data from backend
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
134
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
135 $t->stop();
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
136
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
137 open my $f, '<', "$d/cc.log" or die "Can't open cc.log: $!";
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
138
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
139 is($f->getline(), shift (@r) . " 540793\n", 'log - bytes');
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
140 is($f->getline(), shift (@r) . " 22\n", 'log - bytes pipelined');
665
3a8dc14b98ba Tests: fixed Upgrade handling tests without client abort detection.
Sergey Kandaurov <pluknet@nginx.com>
parents: 589
diff changeset
141 like($f->getline(), qr/\d+ 0\n/, 'log - bytes noupgrade');
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
142
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 ###############################################################################
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 sub upgrade_connect {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 my (%opts) = @_;
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 my $s = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 Proto => 'tcp',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
150 PeerAddr => '127.0.0.1:' . port(8080),
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 or die "Can't connect to nginx: $!\n";
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 # send request, $h->to_string
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 my $buf = "GET / HTTP/1.1" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 . "Host: localhost" . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 . ($opts{noheader} ? '' : "Upgrade: foo" . CRLF)
368
fc6b8270469c Tests: fixed typos.
Sergey Kandaurov <pluknet@nginx.com>
parents: 343
diff changeset
159 . "Connection: Upgrade" . CRLF . CRLF;
263
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 $buf .= $opts{message} . CRLF if defined $opts{message};
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 local $SIG{PIPE} = 'IGNORE';
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 log_out($buf);
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
166 $s->syswrite($buf);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 # read response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 my $got = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 $buf = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 while (1) {
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
174 $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
175 last unless defined $buf and length $buf;
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 log_in($buf);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 $got .= $buf;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 # parse server response
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
183 return if $got !~ m!HTTP/1.1 101!;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
184
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
185 # make sure next line is "handshaked"
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
186
280
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
187 $buf = upgrade_read($s);
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
188
3dd8c7acf3ad Tests: fix couple of possible warnings in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 279
diff changeset
189 return if !defined $buf or $buf ne 'handshaked';
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
190 return $s;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
191 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
192
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
193 sub upgrade_getline {
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
194 my ($s) = @_;
925
6bb1f2ccd386 Tests: removed unused variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 665
diff changeset
195 my ($h, $buf);
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
196
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
197 ${*$s}->{_upgrade_private} ||= { b => '', r => 0 };
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
198 $h = ${*$s}->{_upgrade_private};
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
199
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
200 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
201 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
202 return $1;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
203 }
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
204
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
205 $s->blocking(0);
1155
d37983612b04 Tests: adjusted read timeout in proxy upgrade tests for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
206 while (IO::Select->new($s)->can_read(3)) {
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
207 my $n = $s->sysread($buf, 1024);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
208 last unless $n;
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 $h->{b} .= $buf;
584
7d6db4ac6ab0 Tests: proxy_upgrade.t tests for bytes sent to a client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 583
diff changeset
211 $h->{r} += $n;
279
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 if ($h->{b} =~ /^(.*?\x0a)(.*)/ms) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
214 $h->{b} = $2;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
215 return $1;
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 };
263
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 sub upgrade_write {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 my ($s, $message) = @_;
279
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
222
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
223 $message = $message . CRLF;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
224
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
225 local $SIG{PIPE} = 'IGNORE';
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
226
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
227 $s->blocking(0);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
228 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
229 my $n = $s->syswrite($message);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
230 last unless $n;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
231 $message = substr($message, $n);
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
232 last unless length $message;
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
233 }
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
234
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
235 if (length $message) {
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
236 $s->close();
c754b1c79efe Tests: better timeout handling in proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 277
diff changeset
237 }
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 }
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 sub upgrade_read {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 my ($s) = @_;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
242 my $m = upgrade_getline($s);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 $m =~ s/\x0d?\x0a// if defined $m;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
244 log_in($m);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 return $m;
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
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 sub upgrade_fake_daemon {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 my $server = IO::Socket::INET->new(
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 Proto => 'tcp',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
253 LocalAddr => '127.0.0.1:' . port(8081),
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 Listen => 5,
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 Reuse => 1
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 )
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 or die "Can't create listening socket: $!\n";
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 while (my $client = $server->accept()) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 upgrade_handle_client($client);
589
a9569f57da98 Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 584
diff changeset
261 }
263
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
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 sub upgrade_handle_client {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 my ($client) = @_;
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 $client->autoflush(1);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 $client->blocking(0);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 my $poll = IO::Poll->new;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 my $handshake = 1;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 my $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 my $buffer = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 my $n;
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("(new connection $client)");
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 while (1) {
343
e7dc8f4d0a4b Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
280 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 my $p = $poll->poll(0.5);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 log2c("(poll $p)");
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 foreach my $reader ($poll->handles(POLLIN)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 $n = $client->sysread(my $chunk, 65536);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 return unless $n;
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 log2i($chunk);
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 if ($handshake) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 $buffer .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 next unless $buffer =~ /\x0d?\x0a\x0d?\x0a$/;
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 log2c("(handshake done)");
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 $handshake = 0;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 $buffer = 'HTTP/1.1 101 Switching' . CRLF
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 . 'Upgrade: foo' . CRLF
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
299 . 'Connection: Upgrade' . CRLF . CRLF
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
300 . 'handshaked' . CRLF;
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
301
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
302 log2o($buffer);
263
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 next;
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 $unfinished .= $chunk;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
309 if ($unfinished =~ m/\x0d?\x0a\z/) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
310 $unfinished =~ s/foo/bar/g;
277
8a41f7d38cc3 Tests: fix proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
311 log2o($unfinished);
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312 $buffer .= $unfinished;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
313 $unfinished = '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
314 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
315 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
316
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
317 foreach my $writer ($poll->handles(POLLOUT)) {
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
318 next unless length $buffer;
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
319 $n = $writer->syswrite($buffer);
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
320 substr $buffer, 0, $n, '';
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
321 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
322 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
323 }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
324
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
325 sub log2i { Test::Nginx::log_core('|| <<', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
326 sub log2o { Test::Nginx::log_core('|| >>', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
327 sub log2c { Test::Nginx::log_core('||', @_); }
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
328
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
329 ###############################################################################