|
13 | 13 | require 'sus/fixtures/async/http/server_context' |
14 | 14 |
|
15 | 15 | ServerExamples = Sus::Shared('a websocket server') do |
16 | | - let(:websocket_client) {Async::WebSocket::Client.open(client_endpoint)} |
17 | | - |
18 | 16 | it "can establish connection" do |
19 | 17 | connection = websocket_client.connect(endpoint.authority, "/server") |
20 | 18 |
|
|
102 | 100 | describe Async::WebSocket::Server do |
103 | 101 | include Sus::Fixtures::Async::HTTP::ServerContext |
104 | 102 |
|
| 103 | + let(:websocket_client) {Async::WebSocket::Client.open(client_endpoint)} |
| 104 | + |
105 | 105 | let(:app) do |
106 | 106 | Protocol::HTTP::Middleware.for do |request| |
107 | 107 | Async::WebSocket::Adapters::HTTP.open(request) do |connection| |
|
114 | 114 |
|
115 | 115 | with 'http/1' do |
116 | 116 | let(:protocol) {Async::HTTP::Protocol::HTTP1} |
117 | | - it_behaves_like ServerExamples |
| 117 | + it_behaves_like ServerExamples |
118 | 118 |
|
119 | 119 | it "fails with bad request if missing nounce" do |
120 | 120 | request = Protocol::HTTP::Request["GET", "/", { |
|
126 | 126 |
|
127 | 127 | expect(response).to be(:bad_request?) |
128 | 128 | end |
| 129 | + |
| 130 | + let(:timeout) {nil} |
| 131 | + |
| 132 | + with 'broken server' do |
| 133 | + let(:app) do |
| 134 | + Protocol::HTTP::Middleware.for do |request| |
| 135 | + response = Async::WebSocket::Adapters::HTTP.open(request) do |connection| |
| 136 | + while message = connection.read |
| 137 | + connection.write(message) |
| 138 | + end |
| 139 | + end |
| 140 | + |
| 141 | + if response |
| 142 | + response.tap do |
| 143 | + response.headers.set('sec-websocket-accept', '2badsheep') |
| 144 | + end |
| 145 | + else |
| 146 | + Protocol::HTTP::Response[404, {}, []] |
| 147 | + end |
| 148 | + end |
| 149 | + end |
| 150 | + |
| 151 | + it "fails with protocol error if nounce doesn't match" do |
| 152 | + expect do |
| 153 | + websocket_client.connect(endpoint.authority, "/server") {} |
| 154 | + end.to raise_exception(Protocol::WebSocket::ProtocolError) |
| 155 | + end |
| 156 | + end |
129 | 157 | end |
130 | 158 |
|
131 | 159 | with 'http/2' do |
|
0 commit comments