aboutsummaryrefslogtreecommitdiffstats
path: root/test/connection/base_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/connection/base_test.rb')
-rw-r--r--test/connection/base_test.rb113
1 files changed, 76 insertions, 37 deletions
diff --git a/test/connection/base_test.rb b/test/connection/base_test.rb
index 2f008652ee..da6041db4a 100644
--- a/test/connection/base_test.rb
+++ b/test/connection/base_test.rb
@@ -1,9 +1,9 @@
require 'test_helper'
require 'stubs/test_server'
-class ActionCable::Connection::BaseTest < ActiveSupport::TestCase
+class ActionCable::Connection::BaseTest < ActionCable::TestCase
class Connection < ActionCable::Connection::Base
- attr_reader :websocket, :heartbeat, :subscriptions, :message_buffer, :connected
+ attr_reader :websocket, :subscriptions, :message_buffer, :connected
def connect
@connected = true
@@ -12,68 +12,107 @@ class ActionCable::Connection::BaseTest < ActiveSupport::TestCase
def disconnect
@connected = false
end
+
+ def send_async(method, *args)
+ # Bypass Celluloid
+ send method, *args
+ end
end
setup do
@server = TestServer.new
-
- env = Rack::MockRequest.env_for "/test", 'HTTP_CONNECTION' => 'upgrade', 'HTTP_UPGRADE' => 'websocket'
- @connection = Connection.new(@server, env)
- @response = @connection.process
+ @server.config.allowed_request_origins = %w( http://rubyonrails.com )
end
test "making a connection with invalid headers" do
- connection = ActionCable::Connection::Base.new(@server, Rack::MockRequest.env_for("/test"))
- response = connection.process
- assert_equal 404, response[0]
+ run_in_eventmachine do
+ connection = ActionCable::Connection::Base.new(@server, Rack::MockRequest.env_for("/test"))
+ response = connection.process
+ assert_equal 404, response[0]
+ end
end
test "websocket connection" do
- assert @connection.websocket.possible?
- assert @connection.websocket.alive?
+ run_in_eventmachine do
+ connection = open_connection
+ connection.process
+
+ assert connection.websocket.possible?
+ assert connection.websocket.alive?
+ end
end
test "rack response" do
- assert_equal [ -1, {}, [] ], @response
+ run_in_eventmachine do
+ connection = open_connection
+ response = connection.process
+
+ assert_equal [ -1, {}, [] ], response
+ end
end
test "on connection open" do
- assert ! @connection.connected
-
- EventMachine.expects(:add_periodic_timer)
- @connection.websocket.expects(:transmit).with(regexp_matches(/\_ping/))
- @connection.message_buffer.expects(:process!)
-
- @connection.send :on_open
-
- assert_equal [ @connection ], @server.connections
- assert @connection.connected
+ run_in_eventmachine do
+ connection = open_connection
+ connection.process
+
+ connection.websocket.expects(:transmit).with(regexp_matches(/\_ping/))
+ connection.message_buffer.expects(:process!)
+
+ # Allow EM to run on_open callback
+ EM.next_tick do
+ assert_equal [ connection ], @server.connections
+ assert connection.connected
+ end
+ end
end
test "on connection close" do
- # Setup the connection
- EventMachine.stubs(:add_periodic_timer).returns(true)
- @connection.send :on_open
- assert @connection.connected
+ run_in_eventmachine do
+ connection = open_connection
+ connection.process
+
+ # Setup the connection
+ EventMachine.stubs(:add_periodic_timer).returns(true)
+ connection.send :on_open
+ assert connection.connected
- EventMachine.expects(:cancel_timer)
- @connection.subscriptions.expects(:unsubscribe_from_all)
- @connection.send :on_close
+ connection.subscriptions.expects(:unsubscribe_from_all)
+ connection.send :on_close
- assert ! @connection.connected
- assert_equal [], @server.connections
+ assert ! connection.connected
+ assert_equal [], @server.connections
+ end
end
test "connection statistics" do
- statistics = @connection.statistics
+ run_in_eventmachine do
+ connection = open_connection
+ connection.process
- assert statistics[:identifier].blank?
- assert_kind_of Time, statistics[:started_at]
- assert_equal [], statistics[:subscriptions]
+ statistics = connection.statistics
+
+ assert statistics[:identifier].blank?
+ assert_kind_of Time, statistics[:started_at]
+ assert_equal [], statistics[:subscriptions]
+ end
end
test "explicitly closing a connection" do
- @connection.websocket.expects(:close)
- @connection.close
+ run_in_eventmachine do
+ connection = open_connection
+ connection.process
+
+ connection.websocket.expects(:close)
+ connection.close
+ end
end
+
+ private
+ def open_connection
+ env = Rack::MockRequest.env_for "/test", 'HTTP_CONNECTION' => 'upgrade', 'HTTP_UPGRADE' => 'websocket',
+ 'HTTP_ORIGIN' => 'http://rubyonrails.com'
+
+ Connection.new(@server, env)
+ end
end