@@ -15,17 +15,13 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
15
15
16
16
teardown do
17
17
terminate_process ( @pid ) if process_exists? ( @pid )
18
-
19
- SolidQueue ::Process . destroy_all
20
- SolidQueue ::Job . destroy_all
21
- JobResult . delete_all
22
18
end
23
19
24
20
test "enqueue jobs in multiple queues" do
25
21
6 . times { |i | enqueue_store_result_job ( "job_#{ i } " ) }
26
22
6 . times { |i | enqueue_store_result_job ( "job_#{ i } " , :default ) }
27
23
28
- wait_for_jobs_to_finish_for ( 0.5 . seconds )
24
+ wait_for_jobs_to_finish_for ( 2 . seconds )
29
25
30
26
assert_equal 12 , JobResult . count
31
27
6 . times { |i | assert_completed_job_results ( "job_#{ i } " , :background ) }
@@ -63,17 +59,18 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
63
59
signal_process ( @pid , :TERM , wait : 0.1 . second )
64
60
end
65
61
66
- sleep ( 0.5 . seconds )
62
+ sleep ( 1 . second )
67
63
assert_clean_termination
68
64
end
69
65
70
66
test "quit supervisor while there are jobs in-flight" do
71
67
no_pause = enqueue_store_result_job ( "no pause" )
72
- pause = enqueue_store_result_job ( "pause" , pause : 1 . seconds )
68
+ pause = enqueue_store_result_job ( "pause" , pause : 1 . second )
73
69
74
- signal_process ( @pid , :QUIT , wait : 0.5 . second )
75
- wait_for_jobs_to_finish_for ( 2.5 . seconds )
70
+ signal_process ( @pid , :QUIT , wait : 0.4 . second )
71
+ wait_for_jobs_to_finish_for ( 2 . seconds , except : pause )
76
72
73
+ wait_while_with_timeout ( 2 . seconds ) { process_exists? ( @pid ) }
77
74
assert_not process_exists? ( @pid )
78
75
79
76
assert_completed_job_results ( "no pause" )
@@ -90,8 +87,8 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
90
87
no_pause = enqueue_store_result_job ( "no pause" )
91
88
pause = enqueue_store_result_job ( "pause" , pause : 0.2 . seconds )
92
89
93
- signal_process ( @pid , :TERM , wait : 0.1 . second )
94
- wait_for_jobs_to_finish_for ( 0.5 . seconds )
90
+ signal_process ( @pid , :TERM , wait : 0.3 . second )
91
+ wait_for_jobs_to_finish_for ( 3 . seconds )
95
92
96
93
assert_completed_job_results ( "no pause" )
97
94
assert_completed_job_results ( "pause" )
@@ -108,7 +105,7 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
108
105
pause = enqueue_store_result_job ( "pause" , pause : 0.2 . seconds )
109
106
110
107
signal_process ( @pid , :INT , wait : 0.1 . second )
111
- wait_for_jobs_to_finish_for ( 0.5 . seconds )
108
+ wait_for_jobs_to_finish_for ( 2 . second )
112
109
113
110
assert_completed_job_results ( "no pause" )
114
111
assert_completed_job_results ( "pause" )
@@ -124,8 +121,9 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
124
121
no_pause = enqueue_store_result_job ( "no pause" )
125
122
pause = enqueue_store_result_job ( "pause" , pause : SolidQueue . shutdown_timeout + 10 . second )
126
123
127
- signal_process ( @pid , :TERM , wait : 0.1 . second )
128
- wait_for_jobs_to_finish_for ( SolidQueue . shutdown_timeout + 0.1 . second )
124
+ signal_process ( @pid , :TERM , wait : 0.5 . second )
125
+
126
+ sleep ( SolidQueue . shutdown_timeout + 0.5 . second )
129
127
130
128
assert_completed_job_results ( "no pause" )
131
129
assert_job_status ( no_pause , :finished )
@@ -152,12 +150,12 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
152
150
2 . times { enqueue_store_result_job ( "no error" , :default , pause : 0.01 ) }
153
151
error3 = enqueue_store_result_job ( "error" , :default , exception : RuntimeError )
154
152
155
- wait_for_jobs_to_finish_for ( 0.5 . seconds )
153
+ wait_for_jobs_to_finish_for ( 2 . second , except : [ error1 , error2 , error3 ] )
156
154
157
155
assert_completed_job_results ( "no error" , :background , 3 )
158
156
assert_completed_job_results ( "no error" , :default , 4 )
159
157
160
- assert_failures 3
158
+ wait_while_with_timeout ( 1 . second ) { SolidQueue :: FailedExecution . count < 3 }
161
159
[ error1 , error2 , error3 ] . each do |job |
162
160
assert_job_status ( job , :failed )
163
161
end
@@ -177,7 +175,7 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
177
175
178
176
2 . times { enqueue_store_result_job ( "no exit" , :background ) }
179
177
180
- wait_for_jobs_to_finish_for ( 5 . seconds )
178
+ wait_for_jobs_to_finish_for ( 3 . seconds , except : [ exit_job , pause_job ] )
181
179
182
180
assert_completed_job_results ( "no exit" , :default , 2 )
183
181
assert_completed_job_results ( "no exit" , :background , 4 )
@@ -208,6 +206,7 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
208
206
assert_nil SolidQueue ::Process . find_by ( id : worker . id )
209
207
210
208
# Jobs were completed
209
+ wait_for_jobs_to_finish_for ( 1 . second )
211
210
assert_completed_job_results ( "pause" , :background )
212
211
assert_completed_job_results ( "pause" , :default )
213
212
@@ -218,7 +217,7 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
218
217
# And they can process jobs just fine
219
218
enqueue_store_result_job ( "no_pause" )
220
219
enqueue_store_result_job ( "no_pause" , :default )
221
- wait_for_jobs_to_finish_for ( 0.2 . seconds )
220
+ wait_for_jobs_to_finish_for ( 1 . second )
222
221
223
222
assert_completed_job_results ( "no_pause" , :background )
224
223
assert_completed_job_results ( "no_pause" , :default )
@@ -228,19 +227,18 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
228
227
end
229
228
230
229
test "kill worker individually" do
231
- killed_pause = enqueue_store_result_job ( "killed_pause" , pause : 1 . seconds )
230
+ killed_pause = enqueue_store_result_job ( "killed_pause" , pause : 1 . second )
232
231
enqueue_store_result_job ( "pause" , :default , pause : 0.5 . seconds )
233
232
234
233
worker = find_processes_registered_as ( "Worker" ) . detect { |process | process . metadata [ "queues" ] . include? "background" }
235
-
236
- signal_process ( worker . pid , :KILL , wait : 0.3 . second )
234
+ signal_process ( worker . pid , :KILL , wait : 0.5 . seconds )
237
235
238
236
# Worker didn't have time to clean up or finish the work
239
- sleep ( 0.7 . second )
237
+ sleep ( 0.5 . second )
240
238
assert SolidQueue ::Process . exists? ( id : worker . id )
241
239
242
240
# And there's a new worker that has been registered for the background queue
243
- wait_for_registered_processes ( 4 , timeout : 3 . second )
241
+ wait_for_registered_processes ( 4 , timeout : 5 . second )
244
242
245
243
# The job in the background queue was left claimed as the worker couldn't
246
244
# finish orderly
@@ -252,7 +250,7 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
252
250
# The two current workers can process jobs just fine
253
251
enqueue_store_result_job ( "no_pause" )
254
252
enqueue_store_result_job ( "no_pause" , :default )
255
- wait_for_jobs_to_finish_for ( 0.5 . seconds )
253
+ sleep ( 2 . seconds )
256
254
257
255
assert_completed_job_results ( "no_pause" , :background )
258
256
assert_completed_job_results ( "no_pause" , :default )
@@ -291,11 +289,15 @@ def enqueue_store_result_job(value, queue_name = :background, **options)
291
289
end
292
290
293
291
def assert_completed_job_results ( value , queue_name = :background , count = 1 )
294
- assert_equal count , JobResult . where ( queue_name : queue_name , status : "completed" , value : value ) . count
292
+ skip_active_record_query_cache do
293
+ assert_equal count , JobResult . where ( queue_name : queue_name , status : "completed" , value : value ) . count
294
+ end
295
295
end
296
296
297
297
def assert_started_job_result ( value , queue_name = :background , count = 1 )
298
- assert_equal count , JobResult . where ( queue_name : queue_name , status : "started" , value : value ) . count
298
+ skip_active_record_query_cache do
299
+ assert_equal count , JobResult . where ( queue_name : queue_name , status : "started" , value : value ) . count
300
+ end
299
301
end
300
302
301
303
def assert_job_status ( active_job , status )
@@ -311,10 +313,8 @@ def assert_job_status(active_job, status)
311
313
end
312
314
313
315
def assert_no_claimed_jobs
314
- assert SolidQueue ::ClaimedExecution . none?
315
- end
316
-
317
- def assert_failures ( count )
318
- assert_equal count , SolidQueue ::FailedExecution . count
316
+ skip_active_record_query_cache do
317
+ assert SolidQueue ::ClaimedExecution . none?
318
+ end
319
319
end
320
320
end
0 commit comments