spec/websocket_spec.rb in em-websocket-0.0.4 vs spec/websocket_spec.rb in em-websocket-0.0.5
- old
+ new
@@ -9,21 +9,21 @@
it "should automatically complete WebSocket handshake" do
EM.run do
MSG = "Hello World!"
EventMachine.add_timer(0.1) do
- http = EventMachine::HttpRequest.new('ws://127.0.0.1:8080/').get :timeout => 0
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get :timeout => 0
http.errback { failed }
http.callback { http.response_header.status.should == 101 }
http.stream { |msg|
msg.should == MSG
EventMachine.stop
}
end
- EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
ws.onopen {
puts "WebSocket connection open"
ws.send MSG
}
end
@@ -31,64 +31,144 @@
end
it "should fail on non WebSocket requests" do
EM.run do
EventMachine.add_timer(0.1) do
- http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get :timeout => 0
+ http = EventMachine::HttpRequest.new('http://127.0.0.1:12345/').get :timeout => 0
http.errback { failed }
http.callback {
http.response_header.status.should == 400
EventMachine.stop
}
end
- EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) {}
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) {}
end
end
it "should split multiple messages into separate callbacks" do
EM.run do
messages = %w[1 2]
- recieved = []
+ received = []
EventMachine.add_timer(0.1) do
- http = EventMachine::HttpRequest.new('ws://127.0.0.1:8080/').get :timeout => 0
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get :timeout => 0
http.errback { failed }
http.stream {|msg|}
http.callback {
http.response_header.status.should == 101
http.send messages[0]
http.send messages[1]
}
end
- EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
ws.onopen {}
ws.onclose {}
ws.onmessage {|msg|
- msg.should == messages[recieved.size]
- recieved.push msg
+ msg.should == messages[received.size]
+ received.push msg
- EventMachine.stop if recieved.size == messages.size
+ EventMachine.stop if received.size == messages.size
}
end
end
end
it "should call onclose callback when client closes connection" do
EM.run do
EventMachine.add_timer(0.1) do
- http = EventMachine::HttpRequest.new('ws://127.0.0.1:8080/').get :timeout => 0
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get :timeout => 0
http.errback { failed }
http.callback {
http.response_header.status.should == 101
http.close_connection
}
http.stream{|msg|}
end
- EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
ws.onopen {}
+ ws.onclose {
+ ws.state.should == :closed
+ EventMachine.stop
+ }
+ end
+ end
+ end
+
+ it "should populate ws.request with appropriate headers" do
+ EM.run do
+ EventMachine.add_timer(0.1) do
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get :timeout => 0
+ http.errback { failed }
+ http.callback {
+ http.response_header.status.should == 101
+ http.close_connection
+ }
+ http.stream { |msg| }
+ end
+
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
+ ws.onopen {
+ ws.request["User-Agent"].should == "EventMachine HttpClient"
+ ws.request["Connection"].should == "Upgrade"
+ ws.request["Upgrade"].should == "WebSocket"
+ ws.request["Path"].should == "/"
+ ws.request["Origin"].should == "127.0.0.1"
+ ws.request["Host"].to_s.should == "ws://127.0.0.1:12345"
+ }
+ ws.onclose {
+ ws.state.should == :closed
+ EventMachine.stop
+ }
+ end
+ end
+ end
+
+ it "should allow sending and retrieving query string args passed in on the connection request." do
+ EM.run do
+ EventMachine.add_timer(0.1) do
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get(:query => {'foo' => 'bar', 'baz' => 'qux'}, :timeout => 0)
+ http.errback { failed }
+ http.callback {
+ http.response_header.status.should == 101
+ http.close_connection
+ }
+ http.stream { |msg| }
+ end
+
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
+ ws.onopen {
+ ws.request["Path"].should == "/?baz=qux&foo=bar"
+ ws.request["Query"]["foo"].should == "bar"
+ ws.request["Query"]["baz"].should == "qux"
+ }
+ ws.onclose {
+ ws.state.should == :closed
+ EventMachine.stop
+ }
+ end
+ end
+ end
+
+ it "should ws.response['Query'] to empty hash when no query string params passed in connection URI" do
+ EM.run do
+ EventMachine.add_timer(0.1) do
+ http = EventMachine::HttpRequest.new('ws://127.0.0.1:12345/').get(:timeout => 0)
+ http.errback { failed }
+ http.callback {
+ http.response_header.status.should == 101
+ http.close_connection
+ }
+ http.stream { |msg| }
+ end
+
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 12345) do |ws|
+ ws.onopen {
+ ws.request["Path"].should == "/"
+ ws.request["Query"].should == {}
+ }
ws.onclose {
ws.state.should == :closed
EventMachine.stop
}
end
\ No newline at end of file