diff options
author | Matthew Draper <matthew@trebex.net> | 2016-03-04 05:31:48 +1030 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2016-03-04 05:31:48 +1030 |
commit | bbba0649f529626a076c4247047b60cfbe86d5e4 (patch) | |
tree | cdbf52c160399441574d1f13dd6587ee504e002d /actioncable/test/test_helper.rb | |
parent | cd73632d9d47752013f46e775e59241215cfd8e9 (diff) | |
parent | a373be9da45d4bee684ea03420212780ec1ef4b1 (diff) | |
download | rails-bbba0649f529626a076c4247047b60cfbe86d5e4.tar.gz rails-bbba0649f529626a076c4247047b60cfbe86d5e4.tar.bz2 rails-bbba0649f529626a076c4247047b60cfbe86d5e4.zip |
Merge pull request #23992 from matthewd/em-option
Support faye-websocket + EventMachine as an option
Diffstat (limited to 'actioncable/test/test_helper.rb')
-rw-r--r-- | actioncable/test/test_helper.rb | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/actioncable/test/test_helper.rb b/actioncable/test/test_helper.rb index 797e7786d1..030362d512 100644 --- a/actioncable/test/test_helper.rb +++ b/actioncable/test/test_helper.rb @@ -11,7 +11,41 @@ require 'active_support/core_ext/hash/indifferent_access' # Require all the stubs and models Dir[File.dirname(__FILE__) + '/stubs/*.rb'].each {|file| require file } -class ActionCable::TestCase < ActiveSupport::TestCase +if ENV['FAYE'].present? + require 'faye/websocket' + class << Faye::WebSocket + remove_method :ensure_reactor_running + + # We don't want Faye to start the EM reactor in tests because it makes testing much harder. + # We want to be able to start and stop EM loop in tests to make things simpler. + def ensure_reactor_running + # no-op + end + end +end + +module EventMachineConcurrencyHelpers + def wait_for_async + EM.run_deferred_callbacks + end + + def run_in_eventmachine + failure = nil + EM.run do + begin + yield + rescue => ex + failure = ex + ensure + wait_for_async + EM.stop if EM.reactor_running? + end + end + raise failure if failure + end +end + +module ConcurrentRubyConcurrencyHelpers def wait_for_async e = Concurrent.global_io_executor until e.completed_task_count == e.scheduled_task_count @@ -24,3 +58,11 @@ class ActionCable::TestCase < ActiveSupport::TestCase wait_for_async end end + +class ActionCable::TestCase < ActiveSupport::TestCase + if ENV['FAYE'].present? + include EventMachineConcurrencyHelpers + else + include ConcurrentRubyConcurrencyHelpers + end +end |