@@ -25,10 +25,11 @@ class InstrumentationTest < ActiveSupport::TestCase
25
25
events = subscribed ( /release.*_claimed\. solid_queue/ ) do
26
26
worker = SolidQueue ::Worker . new . tap ( &:start )
27
27
28
- wait_while_with_timeout ( 0.5 . seconds ) { SolidQueue ::ReadyExecution . any? }
28
+ wait_while_with_timeout ( 1 . seconds ) { SolidQueue ::ReadyExecution . any? }
29
29
process = SolidQueue ::Process . last
30
30
31
31
worker . stop
32
+ wait_for_registered_processes ( 0 , timeout : 1 . second )
32
33
end
33
34
34
35
assert_equal 2 , events . size
@@ -43,7 +44,7 @@ class InstrumentationTest < ActiveSupport::TestCase
43
44
44
45
events = subscribed ( /(register|deregister)_process\. solid_queue/ ) do
45
46
worker = SolidQueue ::Worker . new . tap ( &:start )
46
- wait_for_registered_processes ( 1 , timeout : 1 . second )
47
+ wait_while_with_timeout ( 1 . seconds ) { SolidQueue :: ReadyExecution . any? }
47
48
48
49
process = SolidQueue ::Process . last
49
50
@@ -197,6 +198,48 @@ class InstrumentationTest < ActiveSupport::TestCase
197
198
assert_event events . second , "release_many_blocked" , limit : 5 , size : 0
198
199
end
199
200
201
+ test "enqueuing recurring task emits enqueue_recurring_task event" do
202
+ recurring_task = { example_task : { class : "AddToBufferJob" , schedule : "every second" , args : 42 } }
203
+ dispatcher = SolidQueue ::Dispatcher . new ( concurrency_maintenance : false , recurring_tasks : recurring_task )
204
+
205
+ events = subscribed ( "enqueue_recurring_task.solid_queue" ) do
206
+ dispatcher . start
207
+ sleep 1.01
208
+ dispatcher . stop
209
+ end
210
+
211
+ assert events . size >= 1
212
+ event = events . last
213
+
214
+ assert_event event , "enqueue_recurring_task" , task : :example_task , active_job_id : SolidQueue ::Job . last . active_job_id
215
+ assert event . last [ :at ] . present?
216
+ assert_nil event . last [ :other_adapter ]
217
+ end
218
+
219
+ test "skipping a recurring task is reflected in the enqueue_recurring_task event" do
220
+ recurring_task = { example_task : { class : "AddToBufferJob" , schedule : "every second" , args : 42 } }
221
+ dispatchers = 2 . times . collect { SolidQueue ::Dispatcher . new ( concurrency_maintenance : false , recurring_tasks : recurring_task ) }
222
+
223
+ events = subscribed ( "enqueue_recurring_task.solid_queue" ) do
224
+ dispatchers . each ( &:start )
225
+ sleep 1.01
226
+ dispatchers . each ( &:stop )
227
+ end
228
+
229
+ assert events . size >= 2
230
+ events . each do |event |
231
+ assert_event event , "enqueue_recurring_task" , task : :example_task
232
+ end
233
+
234
+ active_job_ids = SolidQueue ::Job . all . map ( &:active_job_id )
235
+ events . group_by { |event | event . last [ :at ] } . each do |_ , events_by_time |
236
+ if events_by_time . many?
237
+ assert events_by_time . any? { |e | e . last [ :active_job_id ] . nil? }
238
+ assert events_by_time . any? { |e | e . last [ :active_job_id ] . in? active_job_ids }
239
+ end
240
+ end
241
+ end
242
+
200
243
private
201
244
def subscribed ( name , &block )
202
245
[ ] . tap do |events |
0 commit comments