This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
shared_examples_for "a WebSocket server drafts 3 and above" do
|
||||
it "should force close connections after a timeout if close handshake is not sent by the client" do
|
||||
em {
|
||||
server_onerror_fired = false
|
||||
server_onclose_fired = false
|
||||
client_got_close_handshake = false
|
||||
|
||||
start_server(:close_timeout => 0.1) { |ws|
|
||||
ws.onopen {
|
||||
# 1: Send close handshake to client
|
||||
EM.next_tick { ws.close(4999, "Close message") }
|
||||
}
|
||||
|
||||
ws.onerror { |e|
|
||||
# 3: Client should receive onerror
|
||||
e.class.should == EM::WebSocket::WSProtocolError
|
||||
e.message.should == "Close handshake un-acked after 0.1s, closing tcp connection"
|
||||
server_onerror_fired = true
|
||||
}
|
||||
|
||||
ws.onclose {
|
||||
server_onclose_fired = true
|
||||
}
|
||||
}
|
||||
start_client { |client|
|
||||
client.onmessage { |msg|
|
||||
# 2: Client does not respond to close handshake (the fake client
|
||||
# doesn't understand them at all hence this is in onmessage)
|
||||
msg.should =~ /Close message/ if version >= 6
|
||||
client_got_close_handshake = true
|
||||
}
|
||||
|
||||
client.onclose {
|
||||
server_onerror_fired.should == true
|
||||
server_onclose_fired.should == true
|
||||
client_got_close_handshake.should == true
|
||||
done
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user