annotate proxy_websocket.t @ 289:cbd4f6eca676

Tests: check if started process is alive while starting nginx. This allows faster test execution in case of startup failures, e.g. due to configuration errors. Note that just adding waitpid() to waitforfile() causes hang on win32 in wait(). To fix this, wait() calls were changed to waitpid() with pid specified.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 27 May 2013 17:15:17 +0400
parents b6f0537afa01
children a9621dbbd0d4
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 TODO: {
263
71bb2a896c7a Tests: more Upgrade handling tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
76 local $TODO = 'not yet' unless $t->has_version('1.3.13');
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 # establish websocket connection
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 my $s = websocket_connect();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 ok($s, "websocket handshake");
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 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 skip "handshake failed", 22 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 # send a frame
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 websocket_write($s, 'foo');
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 is(websocket_read($s), 'bar', "websocket response");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 # send some big frame
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 websocket_write($s, 'foo' x 16384);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 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
95
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 # send multiple frames
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 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 websocket_write($s, ('foo' x 16384) . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 websocket_write($s, 'bazz' . $i);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 }
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 for my $i (1 .. 10) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 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
105 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
106 }
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # establish websocket connection with some pipelined data
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 # and make sure they are correctly passed upstream
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 undef $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 $s = websocket_connect("foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 ok($s, "handshake pipelined");
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 SKIP: {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 skip "handshake failed", 2 unless $s;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 is(websocket_read($s), "bar", "response 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 websocket_write($s, "foo");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 is(websocket_read($s), "bar", "next to pipelined");
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 ###############################################################################
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 sub websocket_connect {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 my ($message) = @_;
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 $s = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 PeerAddr => '127.0.0.1:8080'
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 or die "Can't connect to nginx: $!\n";
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 $h = Protocol::WebSocket::Handshake::Client->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 url => 'ws://localhost');
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 # send request, $h->to_string
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 my $buf = $h->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 $buf .= Protocol::WebSocket::Frame->new($message)->to_bytes
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 if $message;
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 local $SIG{PIPE} = 'IGNORE';
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 log_out($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 $s->syswrite($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 # read response
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 my $got = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 $buf = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 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
159 my $n = $s->sysread($buf, 1024);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 last unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 $got .= $buf;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 last if $got =~ /\x0d?\x0a\x0d?\x0a$/;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 # parse server response
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 $h->parse($got);
278
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
169
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
170 # 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
171 # see websocket_read() for details
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
172
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
173 ${*$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
174 ${*$s}->{_websocket_frame}->append($got);
b6f0537afa01 Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 274
diff changeset
175
248
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 return $s if $h->is_done;
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 sub websocket_write {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 my ($s, $message) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 my $frame = Protocol::WebSocket::Frame->new($message);
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 local $SIG{PIPE} = 'IGNORE';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 $s->blocking(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 log_out($frame->to_bytes);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 $s->syswrite($frame->to_bytes);
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 sub websocket_read {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 my ($s) = @_;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 my ($buf, $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 # 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
195 # 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
196
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 my $frame = ${*$s}->{_websocket_frame};
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 $s->blocking(0);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 return $got if defined $got;
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 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
205 my $n = $s->sysread($buf, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 return $got unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 log_in($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 $frame->append($buf);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 $got = $frame->next();
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 return $got if defined $got;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 }
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
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 sub websocket_fake_daemon {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 my $server = IO::Socket::INET->new(
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 Proto => 'tcp',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 LocalAddr => '127.0.0.1:8081',
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 Listen => 5,
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 Reuse => 1
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 or die "Can't create listening socket: $!\n";
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 while (my $client = $server->accept()) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 websocket_handle_client($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 }
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 sub websocket_handle_client {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 my ($client) = @_;
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 $client->autoflush(1);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 $client->blocking(0);
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 my $poll = IO::Poll->new;
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 my $hs = Protocol::WebSocket::Handshake::Server->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 my $frame = Protocol::WebSocket::Frame->new;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 my $buffer = '';
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 my $closed;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 log2c("(new connection $client)");
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 while (1) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN));
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 my $p = $poll->poll(0.5);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 log2c("(poll $p)");
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 foreach my $reader ($poll->handles(POLLIN)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 $n = $client->sysread(my $chunk, 65536);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 return unless $n;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 log2i($chunk);
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 unless (defined $hs->parse($chunk)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 log2c("(error: " . $hs->error . ")");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 return;
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 if ($hs->is_done) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 $buffer = $hs->to_string;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 log2o($buffer);
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 log2c("(parse: $chunk)");
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
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 $frame->append($chunk);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 while (defined(my $message = $frame->next)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 my $f;
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 if ($frame->is_close) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 log2c("(close frame)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 $closed = 1;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 $f = $frame->new(type => 'close')
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280 ->to_bytes;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 } else {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 $message =~ s/foo/bar/g;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 $f = $frame->new($message)->to_bytes;
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 log2o($f);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 $buffer .= $f;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 }
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 foreach my $writer ($poll->handles(POLLOUT)) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 next unless length $buffer;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 $n = $writer->syswrite($buffer);
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 substr $buffer, 0, $n, '';
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 if ($closed && length $buffer == 0) {
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 log2c("(closed)");
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 return;
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 }
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 }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
304 sub log2i { Test::Nginx::log_core('|| <<', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
305 sub log2o { Test::Nginx::log_core('|| >>', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 sub log2c { Test::Nginx::log_core('||', @_); }
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
307
c388d7c3a666 Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308 ###############################################################################