annotate proxy_websocket.t @ 431:05c46688b54b

Tests: ssl_password_file.t fixes. Make sure to always specify listen socket in all servers as the default vary (under root, nginx will try to listen on 80). Make sure to detect if an https request was processed by http.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 09 Jul 2014 05:19:51 +0400
parents e7dc8f4d0a4b
children b86c05516e65
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
274
ccebd3168b5b Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 263
diff changeset
70 $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
71 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
72
248
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
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 sub websocket_connect {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 my ($message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 my $s = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 PeerAddr => '127.0.0.1:8080'
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 )
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 or die "Can't connect to nginx: $!\n";
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 my $h = Protocol::WebSocket::Handshake::Client->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 url => 'ws://localhost');
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 # send request, $h->to_string
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 my $buf = $h->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 $buf .= Protocol::WebSocket::Frame->new($message)->to_bytes
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 if $message;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 local $SIG{PIPE} = 'IGNORE';
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 log_out($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 $s->syswrite($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 # read response
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 my $got = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 $buf = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 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
154 my $n = $s->sysread($buf, 1024);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 last unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 $got .= $buf;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 # parse server response
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 $h->parse($got);
278
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
164
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
165 # 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
166 # see websocket_read() for details
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
167
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
168 ${*$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
169 ${*$s}->{_websocket_frame}->append($got);
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
170
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 return $s if $h->is_done;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 sub websocket_write {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 my ($s, $message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 my $frame = Protocol::WebSocket::Frame->new($message);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 $s->blocking(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 log_out($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 $s->syswrite($frame->to_bytes);
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 sub websocket_read {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 my ($s) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 my ($buf, $got);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 # 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
190 # 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
191
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 my $frame = ${*$s}->{_websocket_frame};
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 return $got if defined $got;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 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
200 my $n = $s->sysread($buf, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 return $got unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 $frame->append($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 return $got if defined $got;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 sub websocket_fake_daemon {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 my $server = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 LocalAddr => '127.0.0.1:8081',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 Listen => 5,
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 Reuse => 1
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 or die "Can't create listening socket: $!\n";
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 while (my $client = $server->accept()) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 websocket_handle_client($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 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 sub websocket_handle_client {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 my ($client) = @_;
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 $client->autoflush(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 $client->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 my $poll = IO::Poll->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 my $hs = Protocol::WebSocket::Handshake::Server->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 my $frame = Protocol::WebSocket::Frame->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 my $buffer = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 my $closed;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 my $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 log2c("(new connection $client)");
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 while (1) {
343
e7dc8f4d0a4b Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
242 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 my $p = $poll->poll(0.5);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 log2c("(poll $p)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 foreach my $reader ($poll->handles(POLLIN)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 $n = $client->sysread(my $chunk, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 return unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 log2i($chunk);
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 if (!$hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 unless (defined $hs->parse($chunk)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 log2c("(error: " . $hs->error . ")");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 return;
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 if ($hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 $buffer = $hs->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 log2o($buffer);
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 log2c("(parse: $chunk)");
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 $frame->append($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 while (defined(my $message = $frame->next)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 my $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 if ($frame->is_close) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 log2c("(close frame)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 $closed = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 $f = $frame->new(type => 'close')
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 ->to_bytes;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 } else {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 $message =~ s/foo/bar/g;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 $f = $frame->new($message)->to_bytes;
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 log2o($f);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 $buffer .= $f;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 foreach my $writer ($poll->handles(POLLOUT)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 next unless length $buffer;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 $n = $writer->syswrite($buffer);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 substr $buffer, 0, $n, '';
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 if ($closed && length $buffer == 0) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 log2c("(closed)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 return;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 sub log2i { Test::Nginx::log_core('|| <<', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 sub log2o { Test::Nginx::log_core('|| >>', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301 sub log2c { Test::Nginx::log_core('||', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303 ###############################################################################