Mercurial > hg > nginx-tests
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 |
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 ############################################################################### |