rocketjob 1.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +201 -0
- data/README.md +15 -10
- data/bin/rocketjob +3 -1
- data/bin/rocketjob_perf +92 -0
- data/lib/rocket_job/cli.rb +71 -31
- data/lib/rocket_job/config.rb +21 -23
- data/lib/rocket_job/dirmon_entry.rb +63 -45
- data/lib/rocket_job/extensions/aasm.rb +56 -0
- data/lib/rocket_job/extensions/mongo.rb +23 -0
- data/lib/rocket_job/job.rb +9 -433
- data/lib/rocket_job/jobs/dirmon_job.rb +20 -20
- data/lib/rocket_job/jobs/simple_job.rb +12 -0
- data/lib/rocket_job/plugins/document.rb +69 -0
- data/lib/rocket_job/plugins/job/callbacks.rb +92 -0
- data/lib/rocket_job/plugins/job/defaults.rb +40 -0
- data/lib/rocket_job/plugins/job/logger.rb +36 -0
- data/lib/rocket_job/plugins/job/model.rb +288 -0
- data/lib/rocket_job/plugins/job/persistence.rb +167 -0
- data/lib/rocket_job/plugins/job/state_machine.rb +166 -0
- data/lib/rocket_job/plugins/job/worker.rb +167 -0
- data/lib/rocket_job/plugins/restart.rb +54 -0
- data/lib/rocket_job/plugins/singleton.rb +26 -0
- data/lib/rocket_job/plugins/state_machine.rb +105 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +150 -119
- data/lib/rocketjob.rb +43 -21
- data/test/config_test.rb +12 -0
- data/test/dirmon_entry_test.rb +81 -85
- data/test/dirmon_job_test.rb +40 -28
- data/test/job_test.rb +14 -257
- data/test/plugins/job/callbacks_test.rb +163 -0
- data/test/plugins/job/defaults_test.rb +52 -0
- data/test/plugins/job/logger_test.rb +58 -0
- data/test/plugins/job/model_test.rb +97 -0
- data/test/plugins/job/persistence_test.rb +81 -0
- data/test/plugins/job/state_machine_test.rb +118 -0
- data/test/plugins/job/worker_test.rb +183 -0
- data/test/plugins/restart_test.rb +185 -0
- data/test/plugins/singleton_test.rb +94 -0
- data/test/plugins/state_machine_event_callbacks_test.rb +101 -0
- data/test/plugins/state_machine_test.rb +64 -0
- data/test/test_helper.rb +3 -36
- metadata +64 -19
- data/lib/rocket_job/concerns/singleton.rb +0 -33
- data/lib/rocket_job/concerns/worker.rb +0 -214
- data/test/files/_archive/archived.txt +0 -3
- data/test/job_worker_test.rb +0 -86
- data/test/jobs/test_job.rb +0 -46
- data/test/worker_test.rb +0 -97
data/test/dirmon_entry_test.rb
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
|
-
require_relative 'jobs/test_job'
|
3
2
|
|
4
3
|
# Unit Test for RocketJob::Job
|
5
4
|
class DirmonEntryTest < Minitest::Test
|
5
|
+
|
6
|
+
class OneArgumentJob < RocketJob::Job
|
7
|
+
def perform(arg)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
6
11
|
class WithFullFileNameJob < RocketJob::Job
|
7
12
|
# Dirmon will store the filename in this property when starting the job
|
8
|
-
key :
|
13
|
+
key :upload_file_name, String
|
9
14
|
|
10
15
|
def perform
|
11
|
-
# Do something with the file name stored in :
|
16
|
+
# Do something with the file name stored in :upload_file_name
|
12
17
|
end
|
13
18
|
end
|
14
19
|
|
20
|
+
class SumJob < RocketJob::Job
|
21
|
+
@@result = nil
|
22
|
+
|
23
|
+
# For temp test data
|
24
|
+
def self.result
|
25
|
+
@@result
|
26
|
+
end
|
27
|
+
|
28
|
+
def perform(a, b)
|
29
|
+
@@result = a + b
|
30
|
+
end
|
31
|
+
end
|
15
32
|
|
16
33
|
describe RocketJob::DirmonEntry do
|
17
34
|
describe '.config' do
|
@@ -57,31 +74,33 @@ class DirmonEntryTest < Minitest::Test
|
|
57
74
|
end
|
58
75
|
|
59
76
|
it 'convert relative path to an absolute one' do
|
60
|
-
path = Pathname('test/
|
61
|
-
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/
|
77
|
+
path = Pathname('test/files').realpath.to_s
|
78
|
+
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/files')
|
62
79
|
assert_equal [path], RocketJob::DirmonEntry.whitelist_paths
|
63
80
|
end
|
64
81
|
|
65
82
|
it 'prevent duplicates' do
|
66
|
-
path = Pathname('test/
|
67
|
-
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/
|
68
|
-
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/
|
83
|
+
path = Pathname('test/files').realpath.to_s
|
84
|
+
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/files')
|
85
|
+
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path('test/files')
|
69
86
|
assert_equal path, RocketJob::DirmonEntry.add_whitelist_path(path)
|
70
87
|
assert_equal [path], RocketJob::DirmonEntry.whitelist_paths
|
71
88
|
end
|
72
89
|
end
|
73
90
|
|
74
|
-
describe '#
|
91
|
+
describe '#fail!' do
|
75
92
|
before do
|
76
|
-
@dirmon_entry = RocketJob::DirmonEntry.new(job_class_name: '
|
93
|
+
@dirmon_entry = RocketJob::DirmonEntry.new(job_class_name: 'DirmonEntryTest::OneArgumentJob', pattern: 'test/files/**', arguments: [1])
|
77
94
|
@dirmon_entry.enable!
|
95
|
+
assert @dirmon_entry.valid?, @dirmon_entry.errors.messages.ai
|
78
96
|
end
|
97
|
+
|
79
98
|
after do
|
80
99
|
@dirmon_entry.destroy if @dirmon_entry && @dirmon_entry.new_record?
|
81
100
|
end
|
82
101
|
|
83
102
|
it 'fail with message' do
|
84
|
-
@dirmon_entry.
|
103
|
+
@dirmon_entry.fail!('myworker:2323', 'oh no')
|
85
104
|
assert_equal true, @dirmon_entry.failed?
|
86
105
|
assert_equal 'RocketJob::DirmonEntryException', @dirmon_entry.exception.class_name
|
87
106
|
assert_equal 'oh no', @dirmon_entry.exception.message
|
@@ -94,7 +113,7 @@ class DirmonEntryTest < Minitest::Test
|
|
94
113
|
rescue Exception => exc
|
95
114
|
exception = exc
|
96
115
|
end
|
97
|
-
@dirmon_entry.
|
116
|
+
@dirmon_entry.fail!('myworker:2323', exception)
|
98
117
|
|
99
118
|
assert_equal true, @dirmon_entry.failed?
|
100
119
|
assert_equal exception.class.name.to_s, @dirmon_entry.exception.class_name
|
@@ -104,107 +123,84 @@ class DirmonEntryTest < Minitest::Test
|
|
104
123
|
|
105
124
|
describe '#validate' do
|
106
125
|
it 'existance' do
|
107
|
-
assert entry = RocketJob::DirmonEntry.new(job_class_name: '
|
126
|
+
assert entry = RocketJob::DirmonEntry.new(job_class_name: 'DirmonEntryTest::OneArgumentJob')
|
108
127
|
assert_equal false, entry.valid?
|
109
|
-
assert_equal ["can't be blank"], entry.errors[:pattern], entry.errors.
|
110
|
-
end
|
111
|
-
|
112
|
-
describe 'perform_method' do
|
113
|
-
describe 'with an invalid method' do
|
114
|
-
it 'add errors to the entry' do
|
115
|
-
entry = RocketJob::DirmonEntry.new(job_class_name: 'Jobs::TestJob', perform_method: :missing_perform_method)
|
116
|
-
assert_equal false, entry.valid?
|
117
|
-
assert_equal ['Method not implemented by Jobs::TestJob'], entry.errors[:perform_method], entry.errors.inspect
|
118
|
-
end
|
119
|
-
end
|
128
|
+
assert_equal ["can't be blank"], entry.errors[:pattern], entry.errors.messages.ai
|
120
129
|
end
|
121
130
|
|
122
131
|
describe 'job_class_name' do
|
123
132
|
it 'ensure presence' do
|
124
133
|
assert entry = RocketJob::DirmonEntry.new(pattern: 'test/files/**')
|
125
134
|
assert_equal false, entry.valid?
|
126
|
-
assert_equal ["can't be blank", 'job_class_name must be defined and must be derived from RocketJob::Job'], entry.errors[:job_class_name], entry.errors.
|
135
|
+
assert_equal ["can't be blank", 'job_class_name must be defined and must be derived from RocketJob::Job'], entry.errors[:job_class_name], entry.errors.messages.ai
|
127
136
|
end
|
128
137
|
end
|
129
138
|
|
130
139
|
describe 'arguments' do
|
131
140
|
it 'allow no arguments' do
|
132
141
|
assert entry = RocketJob::DirmonEntry.new(
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
assert_equal true, entry.valid?, entry.errors.inspect
|
138
|
-
assert_equal [], entry.errors[:arguments], entry.errors.inspect
|
142
|
+
job_class_name: 'DirmonEntryTest::WithFullFileNameJob',
|
143
|
+
pattern: 'test/files/**'
|
144
|
+
)
|
145
|
+
assert entry.valid?, entry.errors.messages.ai
|
139
146
|
end
|
140
147
|
|
141
148
|
it 'ensure correct number of arguments' do
|
142
149
|
assert entry = RocketJob::DirmonEntry.new(
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
assert_equal ['There must be 1 argument(s)'], entry.errors[:arguments], entry.errors.
|
150
|
+
job_class_name: 'DirmonEntryTest::OneArgumentJob',
|
151
|
+
pattern: 'test/files/**'
|
152
|
+
)
|
153
|
+
refute entry.valid?
|
154
|
+
assert_equal ['There must be 1 argument(s)'], entry.errors[:arguments], entry.errors.messages.ai
|
148
155
|
end
|
149
156
|
|
150
|
-
it '
|
157
|
+
it 'fail if the job name is bad' do
|
151
158
|
assert entry = RocketJob::DirmonEntry.new(
|
152
|
-
|
153
|
-
|
154
|
-
)
|
155
|
-
assert_equal false, entry.valid?
|
156
|
-
assert_equal [], entry.errors[:arguments], entry.errors.inspect
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'arguments with perform_method' do
|
161
|
-
assert entry = RocketJob::DirmonEntry.new(
|
162
|
-
job_class_name: 'Jobs::TestJob',
|
163
|
-
pattern: 'test/files/**',
|
164
|
-
perform_method: :sum
|
159
|
+
job_class_name: 'Jobs::Tests::Names::Things',
|
160
|
+
pattern: 'test/files/**'
|
165
161
|
)
|
166
|
-
|
167
|
-
|
162
|
+
refute entry.valid?
|
163
|
+
assert_equal [], entry.errors[:arguments], entry.errors.messages.ai
|
164
|
+
end
|
168
165
|
end
|
169
166
|
|
170
|
-
it '
|
167
|
+
it 'invalid without 2 arguments' do
|
171
168
|
assert entry = RocketJob::DirmonEntry.new(
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
169
|
+
job_class_name: 'DirmonEntryTest::SumJob',
|
170
|
+
pattern: 'test/files/**'
|
171
|
+
)
|
172
|
+
refute entry.valid?
|
173
|
+
assert_equal ['There must be 2 argument(s)'], entry.errors[:arguments], entry.errors.messages.ai
|
177
174
|
end
|
178
175
|
|
179
|
-
it 'valid with
|
176
|
+
it 'valid with 2 arguments' do
|
180
177
|
assert entry = RocketJob::DirmonEntry.new(
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
assert entry.valid?, entry.errors.inspect
|
178
|
+
job_class_name: 'DirmonEntryTest::SumJob',
|
179
|
+
pattern: 'test/files/**',
|
180
|
+
arguments: [1, 2]
|
181
|
+
)
|
182
|
+
assert entry.valid?, entry.errors.messages.ai
|
187
183
|
end
|
188
184
|
end
|
189
185
|
|
190
186
|
describe 'with valid entry' do
|
191
187
|
before do
|
188
|
+
RocketJob::Jobs::DirmonJob.delete_all
|
192
189
|
@archive_directory = '/tmp/archive_directory'
|
193
190
|
@archive_path = Pathname.new(@archive_directory)
|
194
191
|
@archive_path.mkpath
|
195
192
|
@archive_path = @archive_path.realdirpath
|
196
193
|
@entry = RocketJob::DirmonEntry.new(
|
197
194
|
pattern: 'test/files/**/*',
|
198
|
-
job_class_name: 'Jobs::
|
195
|
+
job_class_name: 'RocketJob::Jobs::DirmonJob',
|
199
196
|
arguments: [{}],
|
200
|
-
properties: {priority: 23
|
197
|
+
properties: {priority: 23},
|
201
198
|
archive_directory: @archive_directory
|
202
199
|
)
|
203
|
-
@job =
|
200
|
+
@job = DirmonEntryTest::OneArgumentJob.new(
|
204
201
|
@entry.properties.merge(
|
205
|
-
arguments:
|
206
|
-
properties:
|
207
|
-
perform_method: @entry.perform_method
|
202
|
+
arguments: @entry.arguments,
|
203
|
+
properties: @entry.properties
|
208
204
|
)
|
209
205
|
)
|
210
206
|
@file = Tempfile.new('archive')
|
@@ -217,6 +213,7 @@ class DirmonEntryTest < Minitest::Test
|
|
217
213
|
|
218
214
|
after do
|
219
215
|
@file.delete if @file
|
216
|
+
RocketJob::Jobs::DirmonJob.delete_all
|
220
217
|
end
|
221
218
|
|
222
219
|
describe '#archive_pathname' do
|
@@ -243,7 +240,7 @@ class DirmonEntryTest < Minitest::Test
|
|
243
240
|
assert_equal @archive_real_name, @job.arguments.first[:full_file_name], @job.arguments
|
244
241
|
end
|
245
242
|
|
246
|
-
it 'sets
|
243
|
+
it 'sets upload_file_name property' do
|
247
244
|
@entry = RocketJob::DirmonEntry.new(
|
248
245
|
pattern: 'test/files/**/*',
|
249
246
|
job_class_name: 'DirmonEntryTest::WithFullFileNameJob',
|
@@ -253,7 +250,7 @@ class DirmonEntryTest < Minitest::Test
|
|
253
250
|
job = @entry.job_class.new
|
254
251
|
@entry.send(:upload_default, job, @pathname)
|
255
252
|
archive_real_name = @archive_path.join("#{job.id}_#{File.basename(@file_name)}").to_s
|
256
|
-
assert_equal archive_real_name, job.
|
253
|
+
assert_equal archive_real_name, job.upload_file_name, job.arguments
|
257
254
|
end
|
258
255
|
|
259
256
|
it 'handles non hash argument and missing property' do
|
@@ -265,14 +262,6 @@ class DirmonEntryTest < Minitest::Test
|
|
265
262
|
end
|
266
263
|
|
267
264
|
describe '#upload_file' do
|
268
|
-
it 'upload using #file_store_upload' do
|
269
|
-
@job.define_singleton_method(:file_store_upload) do |file_name|
|
270
|
-
self.description = "FILE:#{file_name}"
|
271
|
-
end
|
272
|
-
@entry.send(:upload_file, @job, @pathname)
|
273
|
-
assert_equal "FILE:#{@file_name}", @job.description
|
274
|
-
end
|
275
|
-
|
276
265
|
it 'upload using #upload' do
|
277
266
|
@job.define_singleton_method(:upload) do |file_name|
|
278
267
|
self.description = "FILE:#{file_name}"
|
@@ -283,13 +272,20 @@ class DirmonEntryTest < Minitest::Test
|
|
283
272
|
end
|
284
273
|
|
285
274
|
describe '#later' do
|
286
|
-
it '
|
287
|
-
@entry.arguments
|
288
|
-
@entry.
|
289
|
-
job = @entry.later(@pathname)
|
275
|
+
it 'enqueues job' do
|
276
|
+
@entry.arguments = [{}]
|
277
|
+
job = @entry.later(@pathname)
|
290
278
|
assert_equal Pathname.new(@archive_directory).join("#{job.id}_#{File.basename(@file_name)}").realdirpath.to_s, job.arguments.first[:full_file_name]
|
291
279
|
assert job.queued?
|
292
280
|
end
|
281
|
+
|
282
|
+
it 'fails with bad job class name' do
|
283
|
+
@entry.arguments = [{}]
|
284
|
+
@entry.job_class_name = 'Blah'
|
285
|
+
assert_raises ArgumentError do
|
286
|
+
@entry.later(@pathname)
|
287
|
+
end
|
288
|
+
end
|
293
289
|
end
|
294
290
|
|
295
291
|
describe '#each' do
|
data/test/dirmon_job_test.rb
CHANGED
@@ -1,18 +1,24 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
|
-
require_relative 'jobs/test_job'
|
3
2
|
|
4
3
|
# Unit Test for RocketJob::Job
|
5
4
|
class DirmonJobTest < Minitest::Test
|
5
|
+
class DirmonTestJob < RocketJob::Job
|
6
|
+
def perform(hash)
|
7
|
+
3645
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
6
11
|
describe RocketJob::Jobs::DirmonJob do
|
7
12
|
before do
|
13
|
+
RocketJob::Jobs::DirmonJob.delete_all
|
8
14
|
@dirmon_job = RocketJob::Jobs::DirmonJob.new
|
9
15
|
@directory = '/tmp/directory'
|
10
16
|
@archive_directory = '/tmp/archive_directory'
|
11
17
|
@entry = RocketJob::DirmonEntry.new(
|
12
18
|
pattern: "#{@directory}/abc/*",
|
13
|
-
job_class_name: '
|
19
|
+
job_class_name: 'DirmonJobTest::DirmonTestJob',
|
14
20
|
arguments: [{input: 'yes'}],
|
15
|
-
properties: {priority: 23
|
21
|
+
properties: {priority: 23},
|
16
22
|
archive_directory: @archive_directory
|
17
23
|
)
|
18
24
|
FileUtils.makedirs("#{@directory}/abc")
|
@@ -20,7 +26,7 @@ class DirmonJobTest < Minitest::Test
|
|
20
26
|
end
|
21
27
|
|
22
28
|
after do
|
23
|
-
@dirmon_job.
|
29
|
+
@dirmon_job.delete if @dirmon_job && !@dirmon_job.new_record?
|
24
30
|
FileUtils.remove_dir(@archive_directory, true) if Dir.exist?(@archive_directory)
|
25
31
|
FileUtils.remove_dir(@directory, true) if Dir.exist?(@directory)
|
26
32
|
end
|
@@ -57,8 +63,9 @@ class DirmonJobTest < Minitest::Test
|
|
57
63
|
it 'check deleted file' do
|
58
64
|
previous_size = 5
|
59
65
|
file_name = Pathname.new('blah')
|
60
|
-
|
61
|
-
|
66
|
+
assert_raises Errno::ENOENT do
|
67
|
+
@dirmon_job.send(:check_file, @entry, file_name, previous_size)
|
68
|
+
end
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
@@ -137,7 +144,6 @@ class DirmonJobTest < Minitest::Test
|
|
137
144
|
|
138
145
|
describe '#perform' do
|
139
146
|
it 'check directories and reschedule' do
|
140
|
-
dirmon_job = nil
|
141
147
|
previous_file_names = {
|
142
148
|
"#{@directory}/abc/file1" => 5,
|
143
149
|
"#{@directory}/abc/file2" => 10,
|
@@ -146,22 +152,24 @@ class DirmonJobTest < Minitest::Test
|
|
146
152
|
"#{@directory}/abc/file1" => 10,
|
147
153
|
"#{@directory}/abc/file2" => 10,
|
148
154
|
}
|
149
|
-
RocketJob::Jobs::DirmonJob.
|
155
|
+
assert_equal 0, RocketJob::Jobs::DirmonJob.count
|
156
|
+
# perform_now does not save the job, just runs it
|
157
|
+
@dirmon_job = RocketJob::Jobs::DirmonJob.create!(
|
158
|
+
previous_file_names: previous_file_names,
|
159
|
+
priority: 11,
|
160
|
+
check_seconds: 30
|
161
|
+
)
|
150
162
|
RocketJob::Jobs::DirmonJob.stub_any_instance(:check_directories, new_file_names) do
|
151
|
-
|
152
|
-
dirmon_job = RocketJob::Jobs::DirmonJob.new(
|
153
|
-
previous_file_names: previous_file_names,
|
154
|
-
priority: 11,
|
155
|
-
check_seconds: 30
|
156
|
-
)
|
157
|
-
dirmon_job.work_now
|
163
|
+
@dirmon_job.perform_now
|
158
164
|
end
|
159
|
-
assert dirmon_job.completed?, dirmon_job.status.inspect
|
165
|
+
assert @dirmon_job.completed?, @dirmon_job.status.inspect
|
166
|
+
# Job must destroy on complete
|
167
|
+
refute RocketJob::Jobs::DirmonJob.find(@dirmon_job.id)
|
160
168
|
|
161
|
-
#
|
169
|
+
# Must have enqueued another instance to run in the future
|
162
170
|
assert_equal 1, RocketJob::Jobs::DirmonJob.count
|
163
171
|
assert new_dirmon_job = RocketJob::Jobs::DirmonJob.last
|
164
|
-
|
172
|
+
refute_equal @dirmon_job.id.to_s, new_dirmon_job.id.to_s
|
165
173
|
assert new_dirmon_job.run_at
|
166
174
|
assert_equal 11, new_dirmon_job.priority
|
167
175
|
assert_equal 30, new_dirmon_job.check_seconds
|
@@ -171,20 +179,24 @@ class DirmonJobTest < Minitest::Test
|
|
171
179
|
end
|
172
180
|
|
173
181
|
it 'check directories and reschedule even on exception' do
|
174
|
-
dirmon_job = nil
|
175
182
|
RocketJob::Jobs::DirmonJob.destroy_all
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
+
# perform_now does not save the job, just runs it
|
184
|
+
dirmon_job = RocketJob::Jobs::DirmonJob.create!(
|
185
|
+
priority: 11,
|
186
|
+
check_seconds: 30,
|
187
|
+
destroy_on_complete: false
|
188
|
+
)
|
189
|
+
RocketJob::Jobs::DirmonJob.stub_any_instance(:check_directories, -> { raise RuntimeError.new('Oh no') }) do
|
190
|
+
assert_raises RuntimeError do
|
191
|
+
dirmon_job.perform_now
|
192
|
+
end
|
183
193
|
end
|
184
|
-
assert dirmon_job.
|
194
|
+
assert dirmon_job.aborted?, dirmon_job.status.ai
|
195
|
+
assert_equal 'RuntimeError', dirmon_job.exception.class_name, dirmon_job.exception.attributes
|
196
|
+
assert_equal 'Oh no', dirmon_job.exception.message, dirmon_job.exception.attributes
|
185
197
|
|
186
198
|
# Must have enqueued another instance to run in the future
|
187
|
-
assert_equal 2, RocketJob::Jobs::DirmonJob.count
|
199
|
+
assert_equal 2, RocketJob::Jobs::DirmonJob.count, RocketJob::Jobs::DirmonJob.to_a
|
188
200
|
assert new_dirmon_job = RocketJob::Jobs::DirmonJob.last
|
189
201
|
assert new_dirmon_job.run_at
|
190
202
|
assert_equal 11, new_dirmon_job.priority
|