@@ -58,7 +58,7 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
5858 signal_process ( @pid , :TERM , wait : 0.1 . second )
5959 end
6060
61- sleep ( 1 . second )
61+ wait_while_with_timeout ( SolidQueue . shutdown_timeout + 1 . second ) { process_exists? ( @pid ) }
6262 assert_clean_termination
6363 end
6464
@@ -121,14 +121,14 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
121121
122122 test "term supervisor exceeding timeout while there are jobs in-flight" do
123123 no_pause = enqueue_store_result_job ( "no pause" )
124- pause = enqueue_store_result_job ( "pause" , pause : SolidQueue . shutdown_timeout + 10 . second )
124+ pause = enqueue_store_result_job ( "pause" , pause : SolidQueue . shutdown_timeout + 10 . seconds )
125125
126126 wait_while_with_timeout ( 1 . second ) { SolidQueue ::ReadyExecution . count > 1 }
127127
128128 signal_process ( @pid , :TERM , wait : 0.5 . second )
129129 wait_for_jobs_to_finish_for ( 2 . seconds , except : pause )
130130
131- wait_while_with_timeout! ( SolidQueue . shutdown_timeout + 1 . second ) { process_exists? ( @pid ) }
131+ wait_while_with_timeout! ( SolidQueue . shutdown_timeout + 5 . seconds ) { process_exists? ( @pid ) }
132132 assert_not process_exists? ( @pid )
133133
134134 assert_completed_job_results ( "no pause" )
@@ -170,10 +170,13 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
170170 enqueue_store_result_job ( "no exit" , :background )
171171 enqueue_store_result_job ( "no exit" , :default )
172172 end
173- enqueue_store_result_job ( "paused no exit" , :default , pause : 0.5 )
174- exit_job = enqueue_store_result_job ( "exit" , :background , exit_value : 1 , pause : 0.2 )
175- pause_job = enqueue_store_result_job ( "exit" , :background , pause : 0.3 )
173+ enqueue_store_result_job ( "paused no exit" , :default , pause : 0.5 . second )
174+ # the worker for :background queue will exit abnormally
175+ exit_job = enqueue_store_result_job ( "exit" , :background , exit_value : 1 , pause : 0.5 . second )
176+ # this will run *after* exit_job (pause: 1.second) - should also be marked as failed
177+ pause_job = enqueue_store_result_job ( "exit" , :background , pause : 1 . second )
176178
179+ # this will run *before* exit_job (no pause) - should complete normally
177180 2 . times { enqueue_store_result_job ( "no exit" , :background ) }
178181
179182 wait_for_jobs_to_finish_for ( 3 . seconds , except : [ exit_job , pause_job ] )
@@ -228,9 +231,11 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
228231 end
229232
230233 test "kill worker individually" do
231- killed_pause = enqueue_store_result_job ( "killed_pause" , pause : 1 . second )
234+ killed_pause = enqueue_store_result_job ( "killed_pause" , pause : 2 . seconds )
232235 enqueue_store_result_job ( "pause" , :default , pause : 0.5 . seconds )
233236
237+ wait_for_jobs_to_finish_for ( 1 . second , except : [ killed_pause ] )
238+
234239 worker = find_processes_registered_as ( "Worker" ) . detect { |process | process . metadata [ "queues" ] . include? "background" }
235240 signal_process ( worker . pid , :KILL , wait : 0.5 . seconds )
236241
0 commit comments