@@ -26,9 +26,11 @@ class ProcessRecoveryTest < ActiveSupport::TestCase
2626 worker_process = SolidQueue ::Process . find_by ( kind : "Worker" )
2727 assert worker_process
2828
29- # Enqueue a job and manually claim it for the worker to avoid timing races
30- job = enqueue_store_result_job ( 42 )
31- claimed_execution = SolidQueue ::ReadyExecution . claim ( "*" , 5 , worker_process ) . first
29+ # Enqueue a job and wait for it to be claimed
30+ StoreResultJob . perform_later ( 42 , pause : 10 . seconds )
31+ wait_while_with_timeout ( 3 . seconds ) { SolidQueue ::ClaimedExecution . none? }
32+
33+ claimed_execution = SolidQueue ::ClaimedExecution . last
3234 assert claimed_execution . present?
3335 assert_equal worker_process . id , claimed_execution . process_id
3436
@@ -40,9 +42,8 @@ class ProcessRecoveryTest < ActiveSupport::TestCase
4042 worker_pid = worker_process . pid
4143 terminate_process ( worker_pid , signal : :KILL )
4244
43-
4445 # Wait for the supervisor to reap the worker and fail the job
45- wait_for_failed_executions ( 1 , timeout : 5 . seconds )
46+ wait_while_with_timeout ( 3 . seconds ) { SolidQueue :: FailedExecution . none? }
4647
4748 # Assert the execution is failed
4849 failed_execution = SolidQueue ::FailedExecution . last
@@ -53,32 +54,4 @@ class ProcessRecoveryTest < ActiveSupport::TestCase
5354 wait_for_registered_processes ( 2 , timeout : 5 . seconds )
5455 assert_operator SolidQueue ::Process . where ( kind : "Worker" ) . count , :>= , 1
5556 end
56-
57- private
58- def assert_registered_workers_for ( *queues , supervisor_pid : nil )
59- workers = find_processes_registered_as ( "Worker" )
60- registered_queues = workers . map { |process | process . metadata [ "queues" ] } . compact
61- assert_equal queues . map ( &:to_s ) . sort , registered_queues . sort
62- if supervisor_pid
63- assert_equal [ supervisor_pid ] , workers . map { |process | process . supervisor . pid } . uniq
64- end
65- end
66-
67- def enqueue_store_result_job ( value , queue_name = :default , **options )
68- StoreResultJob . set ( queue : queue_name ) . perform_later ( value , **options )
69- end
70-
71- def assert_no_claimed_jobs
72- skip_active_record_query_cache do
73- assert_empty SolidQueue ::ClaimedExecution . all
74- end
75- end
76-
77- def wait_for_claimed_executions ( count , timeout : 1 . second )
78- wait_for ( timeout : timeout ) { SolidQueue ::ClaimedExecution . count == count }
79- end
80-
81- def wait_for_failed_executions ( count , timeout : 1 . second )
82- wait_for ( timeout : timeout ) { SolidQueue ::FailedExecution . count == count }
83- end
8457end
0 commit comments