Skip to content

Commit 4b36e24

Browse files
dorianmariecomrosa
andauthored
support nil logger and ActiveSupport::Logger not Logger (#175)
* Support nil logger and ActiveSupport::Logger not Logger FIxes #168 * Write tests for nil Active Record logger when silencing polling queries Add those as part of the tests for workers and dispatchers. --------- Co-authored-by: Rosa Gutierrez <[email protected]>
1 parent 26b176e commit 4b36e24

File tree

3 files changed

+73
-33
lines changed

3 files changed

+73
-33
lines changed

lib/solid_queue/processes/poller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def poll
4444
end
4545

4646
def with_polling_volume
47-
if SolidQueue.silence_polling?
47+
if SolidQueue.silence_polling? && ActiveRecord::Base.logger
4848
ActiveRecord::Base.logger.silence { yield }
4949
else
5050
yield

test/unit/dispatcher_test.rb

+36-16
Original file line numberDiff line numberDiff line change
@@ -59,30 +59,35 @@ class DispatcherTest < ActiveSupport::TestCase
5959

6060
test "polling queries are logged" do
6161
log = StringIO.new
62-
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
63-
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, false
64-
65-
@dispatcher.start
66-
sleep 0.5
62+
with_active_record_logger(ActiveSupport::Logger.new(log)) do
63+
with_polling(silence: false) do
64+
@dispatcher.start
65+
sleep 0.2
66+
end
67+
end
6768

6869
assert_match /SELECT .* FROM .solid_queue_scheduled_executions. WHERE/, log.string
69-
ensure
70-
ActiveRecord::Base.logger = old_logger
71-
SolidQueue.silence_polling = old_silence_polling
7270
end
7371

7472
test "polling queries can be silenced" do
7573
log = StringIO.new
76-
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
77-
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, true
78-
79-
@dispatcher.start
80-
sleep 0.5
74+
with_active_record_logger(ActiveSupport::Logger.new(log)) do
75+
with_polling(silence: true) do
76+
@dispatcher.start
77+
sleep 0.2
78+
end
79+
end
8180

8281
assert_no_match /SELECT .* FROM .solid_queue_scheduled_executions. WHERE/, log.string
83-
ensure
84-
ActiveRecord::Base.logger = old_logger
85-
SolidQueue.silence_polling = old_silence_polling
82+
end
83+
84+
test "silencing polling queries when there's no Active Record logger" do
85+
with_active_record_logger(nil) do
86+
with_polling(silence: true) do
87+
@dispatcher.start
88+
sleep 0.2
89+
end
90+
end
8691
end
8792

8893
test "run more than one instance of the dispatcher without recurring tasks" do
@@ -121,4 +126,19 @@ class DispatcherTest < ActiveSupport::TestCase
121126
assert_equal 1, run_at_times[i + 1] - run_at_times[i]
122127
end
123128
end
129+
130+
private
131+
def with_polling(silence:)
132+
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, silence
133+
yield
134+
ensure
135+
SolidQueue.silence_polling = old_silence_polling
136+
end
137+
138+
def with_active_record_logger(logger)
139+
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, logger
140+
yield
141+
ensure
142+
ActiveRecord::Base.logger = old_logger
143+
end
124144
end

test/unit/worker_test.rb

+36-16
Original file line numberDiff line numberDiff line change
@@ -64,30 +64,35 @@ class WorkerTest < ActiveSupport::TestCase
6464

6565
test "polling queries are logged" do
6666
log = StringIO.new
67-
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
68-
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, false
69-
70-
@worker.start
71-
sleep 0.2
67+
with_active_record_logger(ActiveSupport::Logger.new(log)) do
68+
with_polling(silence: false) do
69+
@worker.start
70+
sleep 0.2
71+
end
72+
end
7273

7374
assert_match /SELECT .* FROM .solid_queue_ready_executions. WHERE .solid_queue_ready_executions...queue_name./, log.string
74-
ensure
75-
ActiveRecord::Base.logger = old_logger
76-
SolidQueue.silence_polling = old_silence_polling
7775
end
7876

7977
test "polling queries can be silenced" do
8078
log = StringIO.new
81-
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
82-
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, true
83-
84-
@worker.start
85-
sleep 0.2
79+
with_active_record_logger(ActiveSupport::Logger.new(log)) do
80+
with_polling(silence: true) do
81+
@worker.start
82+
sleep 0.2
83+
end
84+
end
8685

8786
assert_no_match /SELECT .* FROM .solid_queue_ready_executions. WHERE .solid_queue_ready_executions...queue_name./, log.string
88-
ensure
89-
ActiveRecord::Base.logger = old_logger
90-
SolidQueue.silence_polling = old_silence_polling
87+
end
88+
89+
test "silencing polling queries when there's no Active Record logger" do
90+
with_active_record_logger(nil) do
91+
with_polling(silence: true) do
92+
@worker.start
93+
sleep 0.2
94+
end
95+
end
9196
end
9297

9398
test "run inline" do
@@ -100,4 +105,19 @@ class WorkerTest < ActiveSupport::TestCase
100105

101106
assert_equal 5, JobResult.where(queue_name: :background, status: "completed", value: :immediate).count
102107
end
108+
109+
private
110+
def with_polling(silence:)
111+
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, silence
112+
yield
113+
ensure
114+
SolidQueue.silence_polling = old_silence_polling
115+
end
116+
117+
def with_active_record_logger(logger)
118+
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, logger
119+
yield
120+
ensure
121+
ActiveRecord::Base.logger = old_logger
122+
end
103123
end

0 commit comments

Comments
 (0)