annotate proxy_websocket.t @ 251:df984d23f9d1

Tests: improve fastcgi keepalive tests. On some platforms fastcgi_keepalive.t tests failed due to problems in handling of data split into multiple packets. Harden tests to fail on all platforms by adding more sleeps, and mark them as TODO till underlying problems are fixed. Additionally, add some padding testing.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 25 Jan 2013 20:53:53 +0400
parents 6a0d934950bc
children 71bb2a896c7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy websockets support.
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use IO::Poll;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use IO::Select;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use IO::Socket::INET;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Socket qw/ CRLF /;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 BEGIN { use FindBin; chdir($FindBin::Bin); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 use lib 'lib';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 use Test::Nginx;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 select STDERR; $| = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 select STDOUT; $| = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 eval {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 require Protocol::WebSocket::Handshake::Client;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 require Protocol::WebSocket::Handshake::Server;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 require Protocol::WebSocket::Frame;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 };
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 plan(skip_all => 'Protocol::WebSocket not installed') if $@;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 my $t = Test::Nginx->new()->has(qw/http proxy/)
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 ->write_file_expand('nginx.conf', <<'EOF')->plan(26);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 %%TEST_GLOBALS%%
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 248
diff changeset
42 daemon off;
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 events {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 http {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 %%TEST_GLOBALS_HTTP%%
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 server {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 listen 127.0.0.1:8080;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 server_name localhost;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 location / {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 proxy_pass http://127.0.0.1:8081;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 proxy_http_version 1.1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 proxy_set_header Upgrade $http_upgrade;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 proxy_set_header Connection "Upgrade";
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 proxy_read_timeout 2s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 send_timeout 2s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 EOF
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $t->run_daemon(\&websocket_fake_daemon);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 $t->run();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 TODO: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 local $TODO = 'not yet';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 # establish websocket connection
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 my $s = websocket_connect();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 ok($s, "websocket handshake");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 skip "handshake failed", 22 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 # send a frame
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 websocket_write($s, 'foo');
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 is(websocket_read($s), 'bar', "websocket response");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 # send some big frame
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 websocket_write($s, 'foo' x 16384);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 like(websocket_read($s), qr/^(bar){16384}$/, "websocket big response");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 # send multiple frames
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 websocket_write($s, ('foo' x 16384) . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 websocket_write($s, 'bazz' . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 like(websocket_read($s), qr/^(bar){16384}\d+$/, "websocket $i");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 is(websocket_read($s), 'bazz' . $i, "websocket small $i");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 # establish websocket connection with some pipelined data
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 # and make sure they are correctly passed upstream
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 undef $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 $s = websocket_connect("foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 ok($s, "handshake pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 skip "handshake failed", 2 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 is(websocket_read($s), "bar", "response pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 websocket_write($s, "foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 is(websocket_read($s), "bar", "next to pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 sub websocket_connect {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 my ($message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 my $s = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 PeerAddr => '127.0.0.1:8080'
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 )
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 or die "Can't connect to nginx: $!\n";
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 my $h = Protocol::WebSocket::Handshake::Client->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 url => 'ws://localhost');
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 # send request, $h->to_string
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 my $buf = $h->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 $buf .= Protocol::WebSocket::Frame->new($message)->to_bytes
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 if $message;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 log_out($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 $s->syswrite($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 # read response
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 my $got = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 $buf = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 while (IO::Select->new($s)->can_read(1.5)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 my $n = $s->sysread($buf, 1024);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 last unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 $got .= $buf;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 # parse server response
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 $h->parse($got);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 return $s if $h->is_done;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 sub websocket_write {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 my ($s, $message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 my $frame = Protocol::WebSocket::Frame->new($message);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 $s->blocking(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 log_out($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 $s->syswrite($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 sub websocket_read {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 my ($s) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 my ($buf, $got);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 # store frame object in socket itself to simplify things
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 # this works as $s is IO::Handle, see man IO::Handle
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 my $frame = ${*$s}->{_websocket_frame};
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 return $got if defined $got;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 while (IO::Select->new($s)->can_read(1.5)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 my $n = $s->sysread($buf, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 return $got unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 $frame->append($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 return $got if defined $got;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 sub websocket_fake_daemon {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 my $server = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 LocalAddr => '127.0.0.1:8081',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 Listen => 5,
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 Reuse => 1
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 )
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 or die "Can't create listening socket: $!\n";
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 while (my $client = $server->accept()) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 websocket_handle_client($client);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 sub websocket_handle_client {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 my ($client) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 $client->autoflush(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 $client->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 my $poll = IO::Poll->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 my $hs = Protocol::WebSocket::Handshake::Server->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 my $frame = Protocol::WebSocket::Frame->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 my $buffer = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 my $closed;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 my $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 log2c("(new connection $client)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 while (1) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 my $p = $poll->poll(0.5);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 log2c("(poll $p)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 foreach my $reader ($poll->handles(POLLIN)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 $n = $client->sysread(my $chunk, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 return unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 log2i($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 if (!$hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 unless (defined $hs->parse($chunk)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 log2c("(error: " . $hs->error . ")");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 return;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 if ($hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 $buffer = $hs->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 log2o($buffer);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 log2c("(parse: $chunk)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 $frame->append($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 while (defined(my $message = $frame->next)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 my $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 if ($frame->is_close) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 log2c("(close frame)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 $closed = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 $f = $frame->new(type => 'close')
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 ->to_bytes;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 } else {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 $message =~ s/foo/bar/g;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 $f = $frame->new($message)->to_bytes;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 log2o($f);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 $buffer .= $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 foreach my $writer ($poll->handles(POLLOUT)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 next unless length $buffer;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 $n = $writer->syswrite($buffer);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 substr $buffer, 0, $n, '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 if ($closed && length $buffer == 0) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 log2c("(closed)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 return;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 sub log2i { Test::Nginx::log_core('|| <<', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 sub log2o { Test::Nginx::log_core('|| >>', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 sub log2c { Test::Nginx::log_core('||', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 ###############################################################################