aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/notifications_test.rb
diff options
context:
space:
mode:
authorthedarkone <thedarkone2@gmail.com>2015-11-28 01:40:21 +0100
committerthedarkone <thedarkone2@gmail.com>2015-11-28 01:40:21 +0100
commitab3c4a4083cce34131eeb23df42041fafe063fc3 (patch)
tree73418a2a78df36fc4ff0ac62202f39be66713ef7 /activesupport/test/notifications_test.rb
parent9d7d12c0044751a494162760cd018fb66eab200f (diff)
downloadrails-ab3c4a4083cce34131eeb23df42041fafe063fc3.tar.gz
rails-ab3c4a4083cce34131eeb23df42041fafe063fc3.tar.bz2
rails-ab3c4a4083cce34131eeb23df42041fafe063fc3.zip
Subscribing to notifications while inside the said instrumented section.
The issue is that on the exit from Instrumenter#instrument section, an Evented listener will run into an error because its thread local (Thread.current[:_timestack]) has not been set up by the #start method (this obviously happens because the Evented listeners didn't exist at the time, since no subscribtion to that section was made yet). Note: support for subscribing to instrumented sections, while being inside those instrumented sections, might be removed in the future. Maybe fixes #21873.
Diffstat (limited to 'activesupport/test/notifications_test.rb')
-rw-r--r--activesupport/test/notifications_test.rb15
1 files changed, 15 insertions, 0 deletions
diff --git a/activesupport/test/notifications_test.rb b/activesupport/test/notifications_test.rb
index f729f0a95b..d9cc392ac9 100644
--- a/activesupport/test/notifications_test.rb
+++ b/activesupport/test/notifications_test.rb
@@ -42,6 +42,21 @@ module Notifications
ActiveSupport::Notifications.instrument(name)
assert_equal expected, events
end
+
+ def test_subsribing_to_instrumentation_while_inside_it
+ # the repro requires that there are no evented subscribers for the "foo" event,
+ # so we have to duplicate some of the setup code
+ old_notifier = ActiveSupport::Notifications.notifier
+ ActiveSupport::Notifications.notifier = ActiveSupport::Notifications::Fanout.new
+
+ ActiveSupport::Notifications.subscribe('foo', TestSubscriber.new)
+
+ ActiveSupport::Notifications.instrument('foo') do
+ ActiveSupport::Notifications.subscribe('foo') {}
+ end
+ ensure
+ ActiveSupport::Notifications.notifier = old_notifier
+ end
end
class UnsubscribeTest < TestCase