annotate proxy_websocket.t @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents b86c05516e65
children a9569f57da98
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 BEGIN { use FindBin; chdir($FindBin::Bin); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 use lib 'lib';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 use Test::Nginx;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
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 select STDERR; $| = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 select STDOUT; $| = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 eval {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 require Protocol::WebSocket::Handshake::Client;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 require Protocol::WebSocket::Handshake::Server;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 require Protocol::WebSocket::Frame;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 };
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 plan(skip_all => 'Protocol::WebSocket not installed') if $@;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 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
37 ->write_file_expand('nginx.conf', <<'EOF')->plan(26);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 %%TEST_GLOBALS%%
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 248
diff changeset
41 daemon off;
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 events {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 }
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 http {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 %%TEST_GLOBALS_HTTP%%
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 server {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 listen 127.0.0.1:8080;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 server_name localhost;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 location / {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 proxy_pass http://127.0.0.1:8081;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 proxy_http_version 1.1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 proxy_set_header Upgrade $http_upgrade;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 proxy_set_header Connection "Upgrade";
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 proxy_read_timeout 2s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 send_timeout 2s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
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 EOF
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 $t->run_daemon(\&websocket_fake_daemon);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $t->run();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
274
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
69 $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
70 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
71
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 # establish websocket connection
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 my $s = websocket_connect();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 ok($s, "websocket handshake");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 skip "handshake failed", 22 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 # send a frame
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 websocket_write($s, 'foo');
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 is(websocket_read($s), 'bar', "websocket response");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 # send some big frame
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 websocket_write($s, 'foo' x 16384);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 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
91
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 # send multiple frames
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 websocket_write($s, ('foo' x 16384) . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 websocket_write($s, 'bazz' . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 }
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 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 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
101 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
102 }
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 # establish websocket connection with some pipelined data
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 # and make sure they are correctly passed upstream
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 undef $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 $s = websocket_connect("foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 ok($s, "handshake pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 skip "handshake failed", 2 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 is(websocket_read($s), "bar", "response pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 websocket_write($s, "foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 is(websocket_read($s), "bar", "next to pipelined");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 }
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 sub websocket_connect {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 my ($message) = @_;
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 my $s = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 PeerAddr => '127.0.0.1:8080'
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 )
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 or die "Can't connect to nginx: $!\n";
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 my $h = Protocol::WebSocket::Handshake::Client->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 url => 'ws://localhost');
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 # send request, $h->to_string
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 my $buf = $h->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 $buf .= Protocol::WebSocket::Frame->new($message)->to_bytes
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 if $message;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 log_out($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 $s->syswrite($buf);
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 # read response
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 my $got = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 $buf = '';
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 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 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
153 my $n = $s->sysread($buf, 1024);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 last unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 $got .= $buf;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 # parse server response
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 $h->parse($got);
278
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
163
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
164 # store the rest for later websocket_read()
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
165 # see websocket_read() for details
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
166
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
167 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new();
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
168 ${*$s}->{_websocket_frame}->append($got);
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
169
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 return $s if $h->is_done;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 }
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 sub websocket_write {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 my ($s, $message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 my $frame = Protocol::WebSocket::Frame->new($message);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 $s->blocking(1);
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 log_out($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 $s->syswrite($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 }
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 sub websocket_read {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 my ($s) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 my ($buf, $got);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 # 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
189 # 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
190
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 my $frame = ${*$s}->{_websocket_frame};
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 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 return $got if defined $got;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 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
199 my $n = $s->sysread($buf, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 return $got unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 $frame->append($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 return $got if defined $got;
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 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 ###############################################################################
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 sub websocket_fake_daemon {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 my $server = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 LocalAddr => '127.0.0.1:8081',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 Listen => 5,
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 Reuse => 1
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 )
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 or die "Can't create listening socket: $!\n";
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 while (my $client = $server->accept()) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 websocket_handle_client($client);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 }
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 sub websocket_handle_client {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 my ($client) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 $client->autoflush(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 $client->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 my $poll = IO::Poll->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 my $hs = Protocol::WebSocket::Handshake::Server->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 my $frame = Protocol::WebSocket::Frame->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 my $buffer = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 my $closed;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 my $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 log2c("(new connection $client)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 while (1) {
343
e7dc8f4d0a4b Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
241 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $p = $poll->poll(0.5);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 log2c("(poll $p)");
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 foreach my $reader ($poll->handles(POLLIN)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 $n = $client->sysread(my $chunk, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 return unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 log2i($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 if (!$hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 unless (defined $hs->parse($chunk)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 log2c("(error: " . $hs->error . ")");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 return;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 }
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 if ($hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 $buffer = $hs->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 log2o($buffer);
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 log2c("(parse: $chunk)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 $frame->append($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 while (defined(my $message = $frame->next)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 my $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 if ($frame->is_close) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 log2c("(close frame)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 $closed = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 $f = $frame->new(type => 'close')
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 ->to_bytes;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 } else {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 $message =~ s/foo/bar/g;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 $f = $frame->new($message)->to_bytes;
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 log2o($f);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 $buffer .= $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 foreach my $writer ($poll->handles(POLLOUT)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 next unless length $buffer;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 $n = $writer->syswrite($buffer);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 substr $buffer, 0, $n, '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 }
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 if ($closed && length $buffer == 0) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 log2c("(closed)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 return;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 }
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 sub log2i { Test::Nginx::log_core('|| <<', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 sub log2o { Test::Nginx::log_core('|| >>', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 sub log2c { Test::Nginx::log_core('||', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 ###############################################################################