Skip to content

Commit e0497c6

Browse files
committed
Tidy up tests, grouping some helpers together
1 parent 418f885 commit e0497c6

10 files changed

+119
-105
lines changed

test/dummy/config/environments/test.rb

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
# system, or in some way before deploying your code.
1717
config.eager_load = ENV["CI"].present?
1818

19+
config.autoload_paths += %w[ test/test_helpers ]
20+
1921
# Configure public file server for tests with Cache-Control for performance.
2022
config.public_file_server.enabled = true
2123
config.public_file_server.headers = {

test/helpers/.keep

Whitespace-only changes.

test/integration/forked_processes_lifecycle_test.rb

-6
Original file line numberDiff line numberDiff line change
@@ -316,10 +316,4 @@ def assert_job_status(active_job, status)
316316
assert job.public_send("#{status}?")
317317
end
318318
end
319-
320-
def assert_no_claimed_jobs
321-
skip_active_record_query_cache do
322-
assert SolidQueue::ClaimedExecution.none?
323-
end
324-
end
325319
end

test/integration/recurring_tasks_test.rb

-4
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ class RecurringTasksTest < ActiveSupport::TestCase
7878
end
7979

8080
private
81-
def wait_for_jobs_to_be_enqueued(count, timeout: 1.second)
82-
wait_while_with_timeout(timeout) { SolidQueue::Job.count < count }
83-
end
84-
8581
def assert_recurring_tasks(expected_tasks)
8682
skip_active_record_query_cache do
8783
assert_equal expected_tasks.count, SolidQueue::RecurringTask.count

test/test_helper.rb

+2-71
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def write(...)
2626
Logger::LogDevice.prepend(BlockLogDeviceTimeoutExceptions)
2727

2828
class ActiveSupport::TestCase
29+
include ProcessesTestHelper, JobsTestHelper
30+
2931
teardown do
3032
JobBuffer.clear
3133

@@ -43,57 +45,6 @@ class ActiveSupport::TestCase
4345
end
4446

4547
private
46-
def wait_for_jobs_to_finish_for(timeout = 1.second, except: [])
47-
wait_while_with_timeout(timeout) do
48-
SolidQueue::Job.where.not(active_job_id: Array(except).map(&:job_id)).where(finished_at: nil).any?
49-
end
50-
end
51-
52-
def assert_no_unfinished_jobs
53-
skip_active_record_query_cache do
54-
assert SolidQueue::Job.where(finished_at: nil).none?
55-
end
56-
end
57-
58-
def run_supervisor_as_fork(**options)
59-
fork do
60-
SolidQueue::Supervisor.start(mode: :fork, **options)
61-
end
62-
end
63-
64-
def wait_for_registered_processes(count, timeout: 1.second)
65-
wait_while_with_timeout(timeout) { SolidQueue::Process.count != count }
66-
end
67-
68-
def assert_no_registered_processes
69-
skip_active_record_query_cache do
70-
assert SolidQueue::Process.none?
71-
end
72-
end
73-
74-
def find_processes_registered_as(kind)
75-
skip_active_record_query_cache do
76-
SolidQueue::Process.where(kind: kind)
77-
end
78-
end
79-
80-
def terminate_process(pid, timeout: 10, signal: :TERM)
81-
signal_process(pid, signal)
82-
wait_for_process_termination_with_timeout(pid, timeout: timeout)
83-
end
84-
85-
def wait_for_process_termination_with_timeout(pid, timeout: 10, exitstatus: 0)
86-
Timeout.timeout(timeout) do
87-
if process_exists?(pid)
88-
Process.waitpid(pid)
89-
assert exitstatus, $?.exitstatus
90-
end
91-
end
92-
rescue Timeout::Error
93-
signal_process(pid, :KILL)
94-
raise
95-
end
96-
9748
def wait_while_with_timeout(timeout, &block)
9849
wait_while_with_timeout!(timeout, &block)
9950
rescue Timeout::Error
@@ -109,26 +60,6 @@ def wait_while_with_timeout!(timeout, &block)
10960
end
11061
end
11162

112-
def signal_process(pid, signal, wait: nil)
113-
Thread.new do
114-
sleep(wait) if wait
115-
Process.kill(signal, pid)
116-
end
117-
end
118-
119-
def process_exists?(pid)
120-
reap_processes
121-
Process.getpgid(pid)
122-
true
123-
rescue Errno::ESRCH
124-
false
125-
end
126-
127-
def reap_processes
128-
Process.waitpid(-1, Process::WNOHANG)
129-
rescue Errno::ECHILD
130-
end
131-
13263
# Allow skipping AR query cache, necessary when running test code in multiple
13364
# forks. The queries done in the test might be cached and if we don't perform
13465
# any non-SELECT queries after previous SELECT queries were cached on the connection

test/test_helpers/jobs_test_helper.rb

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module JobsTestHelper
2+
private
3+
4+
def wait_for_jobs_to_finish_for(timeout = 1.second, except: [])
5+
wait_while_with_timeout(timeout) do
6+
skip_active_record_query_cache do
7+
SolidQueue::Job.where.not(active_job_id: Array(except).map(&:job_id)).where(finished_at: nil).any?
8+
end
9+
end
10+
end
11+
12+
def assert_no_unfinished_jobs
13+
skip_active_record_query_cache do
14+
assert SolidQueue::Job.where(finished_at: nil).none?
15+
end
16+
end
17+
18+
def wait_for_jobs_to_be_enqueued(count, timeout: 1.second)
19+
wait_while_with_timeout(timeout) do
20+
skip_active_record_query_cache do
21+
SolidQueue::Job.count < count
22+
end
23+
end
24+
end
25+
26+
def assert_no_claimed_jobs
27+
skip_active_record_query_cache do
28+
assert SolidQueue::ClaimedExecution.none?
29+
end
30+
end
31+
end
+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
module ProcessesTestHelper
2+
private
3+
4+
def run_supervisor_as_fork(**options)
5+
fork do
6+
SolidQueue::Supervisor.start(mode: :fork, **options)
7+
end
8+
end
9+
10+
def wait_for_registered_processes(count, timeout: 1.second)
11+
wait_while_with_timeout(timeout) { SolidQueue::Process.count != count }
12+
end
13+
14+
def assert_no_registered_processes
15+
skip_active_record_query_cache do
16+
assert SolidQueue::Process.none?
17+
end
18+
end
19+
20+
def assert_registered_processes(kind:, count: 1, supervisor_pid: nil, **attributes)
21+
processes = skip_active_record_query_cache { SolidQueue::Process.where(kind: kind).to_a }
22+
assert_equal count, processes.count
23+
24+
if supervisor_pid
25+
processes.each do |process|
26+
assert_equal supervisor_pid, process.supervisor.pid
27+
end
28+
end
29+
30+
attributes.each do |attr, value|
31+
processes.each do |process|
32+
if value.present?
33+
assert_equal value, process.public_send(attr)
34+
else
35+
assert_nil process.public_send(attr)
36+
end
37+
end
38+
end
39+
end
40+
41+
def find_processes_registered_as(kind)
42+
skip_active_record_query_cache do
43+
SolidQueue::Process.where(kind: kind)
44+
end
45+
end
46+
47+
def terminate_process(pid, timeout: 10, signal: :TERM)
48+
signal_process(pid, signal)
49+
wait_for_process_termination_with_timeout(pid, timeout: timeout)
50+
end
51+
52+
def wait_for_process_termination_with_timeout(pid, timeout: 10, exitstatus: 0)
53+
Timeout.timeout(timeout) do
54+
if process_exists?(pid)
55+
Process.waitpid(pid)
56+
assert exitstatus, $?.exitstatus
57+
end
58+
end
59+
rescue Timeout::Error
60+
signal_process(pid, :KILL)
61+
raise
62+
end
63+
64+
def signal_process(pid, signal, wait: nil)
65+
Thread.new do
66+
sleep(wait) if wait
67+
Process.kill(signal, pid)
68+
end
69+
end
70+
71+
def process_exists?(pid)
72+
reap_processes
73+
Process.getpgid(pid)
74+
true
75+
rescue Errno::ESRCH
76+
false
77+
end
78+
79+
def reap_processes
80+
Process.waitpid(-1, Process::WNOHANG)
81+
rescue Errno::ECHILD
82+
end
83+
end

test/unit/async_supervisor_test.rb

-13
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,4 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
6161
def run_supervisor_async(**kwargs)
6262
SolidQueue::Supervisor.start(mode: :async, **kwargs)
6363
end
64-
65-
def assert_registered_processes(kind:, supervisor_id: nil, count: 1)
66-
processes = SolidQueue::Process.where(kind: kind)
67-
assert_equal count, processes.count
68-
69-
processes.each do |process|
70-
if supervisor_id.present?
71-
assert_equal supervisor_id, process.supervisor_id
72-
else
73-
assert_nil process.supervisor_id
74-
end
75-
end
76-
end
7764
end

test/unit/dispatcher_test.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,10 @@ class DispatcherTest < ActiveSupport::TestCase
100100
@dispatcher.start
101101
another_dispatcher.start
102102

103-
sleep(0.7.seconds)
103+
wait_while_with_timeout(1.second) { SolidQueue::ScheduledExecution.any? }
104104

105105
assert_equal 0, SolidQueue::ScheduledExecution.count
106106
assert_equal 15, SolidQueue::ReadyExecution.count
107-
108107
ensure
109108
another_dispatcher&.stop
110109
end

test/unit/fork_supervisor_test.rb

-9
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,6 @@ def assert_registered_dispatcher(supervisor_pid: nil)
137137
assert_registered_processes(kind: "Dispatcher", count: 1, supervisor_pid: supervisor_pid)
138138
end
139139

140-
def assert_registered_processes(kind:, supervisor_pid:, count: 1)
141-
processes = find_processes_registered_as(kind)
142-
assert_equal count, processes.count
143-
144-
processes.each do |process|
145-
assert_equal supervisor_pid, process.supervisor.pid
146-
end
147-
end
148-
149140
def assert_registered_supervisor(pid)
150141
skip_active_record_query_cache do
151142
processes = find_processes_registered_as("Supervisor(fork)")

0 commit comments

Comments
 (0)