backburner 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -4
- data/README.md +70 -14
- data/lib/active_job/queue_adapters/backburner_adapter.rb +9 -2
- data/lib/backburner/cli.rb +1 -1
- data/lib/backburner/enqueue_pool.rb +2 -0
- data/lib/backburner/performable.rb +28 -3
- data/lib/backburner/version.rb +1 -1
- data/lib/backburner/worker.rb +38 -4
- data/lib/backburner/workers/threading.rb +16 -0
- data/lib/backburner/workers/threads_on_fork.rb +1 -0
- metadata +8 -82
- data/.github/workflows/ci.yml +0 -45
- data/.github/workflows/github-release.yml +0 -58
- data/.github/workflows/release.yml +0 -221
- data/.gitignore +0 -17
- data/CONTRIBUTING.md +0 -37
- data/Gemfile +0 -7
- data/Rakefile +0 -17
- data/TODO +0 -4
- data/backburner.gemspec +0 -31
- data/examples/custom.rb +0 -25
- data/examples/demo.rb +0 -60
- data/examples/god.rb +0 -46
- data/examples/hooked.rb +0 -87
- data/examples/retried.rb +0 -31
- data/examples/simple.rb +0 -43
- data/examples/stress.rb +0 -31
- data/test/active_job_adapter_test.rb +0 -24
- data/test/async_proxy_test.rb +0 -36
- data/test/back_burner_test.rb +0 -101
- data/test/connection_test.rb +0 -201
- data/test/fixtures/active_job_app.rb +0 -53
- data/test/fixtures/active_jobs.rb +0 -11
- data/test/fixtures/autoload/test_broken_name_job.rb +0 -4
- data/test/fixtures/autoload/test_broken_no_method_job.rb +0 -4
- data/test/fixtures/autoload/test_broken_require_job.rb +0 -4
- data/test/fixtures/autoload/test_broken_runtime_job.rb +0 -4
- data/test/fixtures/autoload/test_broken_syntax_job.rb +0 -4
- data/test/fixtures/autoload/test_broken_timeout_job.rb +0 -4
- data/test/fixtures/autoload/test_same_name_job.rb +0 -5
- data/test/fixtures/hooked.rb +0 -122
- data/test/fixtures/test_fork_jobs.rb +0 -77
- data/test/fixtures/test_forking_jobs.rb +0 -56
- data/test/fixtures/test_jobs.rb +0 -140
- data/test/fixtures/test_queue_settings.rb +0 -54
- data/test/helpers/templogger.rb +0 -22
- data/test/helpers_test.rb +0 -462
- data/test/hooks_test.rb +0 -112
- data/test/job_test.rb +0 -207
- data/test/logger_test.rb +0 -71
- data/test/performable_test.rb +0 -138
- data/test/queue_test.rb +0 -132
- data/test/test_helper.rb +0 -182
- data/test/worker_test.rb +0 -502
- data/test/workers/forking_worker_test.rb +0 -199
- data/test/workers/simple_worker_test.rb +0 -622
- data/test/workers/threading_worker_test.rb +0 -125
- data/test/workers/threads_on_fork_worker_test.rb +0 -751
data/test/helpers_test.rb
DELETED
|
@@ -1,462 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
|
2
|
-
|
|
3
|
-
describe "Backburner::Helpers module" do
|
|
4
|
-
include Backburner::Helpers
|
|
5
|
-
|
|
6
|
-
describe "for classify method" do
|
|
7
|
-
it "should support simple classify" do
|
|
8
|
-
assert_equal "FooBarBaz", classify("foo-bar-baz")
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should not affect existing classified strings" do
|
|
12
|
-
assert_equal "Foo::BarBaz", classify("Foo::BarBaz")
|
|
13
|
-
end
|
|
14
|
-
end # classify
|
|
15
|
-
|
|
16
|
-
describe "for constantize method" do
|
|
17
|
-
it "should constantize known constant" do
|
|
18
|
-
assert_equal Backburner, constantize("Backburner")
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should properly report when constant is undefined" do
|
|
22
|
-
assert_raises(NameError) { constantize("FakeObject") }
|
|
23
|
-
end
|
|
24
|
-
end # constantize
|
|
25
|
-
|
|
26
|
-
describe "for dasherize method" do
|
|
27
|
-
it "should not harm existing dashed names" do
|
|
28
|
-
assert_equal "foo/bar-baz", dasherize("foo/bar-baz")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should properly convert simple names to dashes" do
|
|
32
|
-
assert_equal "foo-bar", dasherize("FooBar")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should properly convert class to dash with namespace" do
|
|
36
|
-
assert_equal "foo/bar-baz", dasherize("Foo::BarBaz")
|
|
37
|
-
end
|
|
38
|
-
end # dasherize
|
|
39
|
-
|
|
40
|
-
describe "for exception_message method" do
|
|
41
|
-
it "prints out message about failure" do
|
|
42
|
-
output = exception_message(RuntimeError.new("test"))
|
|
43
|
-
assert_match(/Exception RuntimeError/, output)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "shortens the backtrace paths under a working directory that has regexp characters in its name" do
|
|
47
|
-
["jobs[1]", "jobs["].each do |name|
|
|
48
|
-
Dir.mktmpdir do |root|
|
|
49
|
-
dir = File.join(File.realpath(root), name)
|
|
50
|
-
Dir.mkdir(dir)
|
|
51
|
-
error = RuntimeError.new("test")
|
|
52
|
-
error.set_backtrace(["#{dir}/app/jobs/report.rb:3:in `perform'"])
|
|
53
|
-
output = Dir.chdir(dir) { exception_message(error) }
|
|
54
|
-
assert_equal "Exception RuntimeError -> test\n app/jobs/report.rb:3:in `perform'", output, name
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end # exception_message
|
|
59
|
-
|
|
60
|
-
describe "for queue_config" do
|
|
61
|
-
before { Backburner.expects(:configuration).returns(stub(:tube_namespace => "test.foo.job", :namespace_separator => '.')) }
|
|
62
|
-
|
|
63
|
-
it "accesses correct value for namespace" do
|
|
64
|
-
assert_equal "test.foo.job", queue_config.tube_namespace
|
|
65
|
-
end
|
|
66
|
-
end # config
|
|
67
|
-
|
|
68
|
-
describe "for expand_tube_name method" do
|
|
69
|
-
before { Backburner.stubs(:configuration).returns(stub(:tube_namespace => "test.foo.job.", :namespace_separator => '.', :primary_queue => "backburner-jobs")) }
|
|
70
|
-
|
|
71
|
-
it "supports base strings" do
|
|
72
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name("email/send_news")
|
|
73
|
-
end # simple string
|
|
74
|
-
|
|
75
|
-
it "supports qualified strings" do
|
|
76
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name("test.foo.job.email/send_news")
|
|
77
|
-
end # qualified string
|
|
78
|
-
|
|
79
|
-
it "supports base symbols" do
|
|
80
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name(:"email/send_news")
|
|
81
|
-
end # symbols
|
|
82
|
-
|
|
83
|
-
it "supports queue names" do
|
|
84
|
-
test = stub(:queue => "email/send_news")
|
|
85
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name(test)
|
|
86
|
-
end # queue names
|
|
87
|
-
|
|
88
|
-
it "supports class names" do
|
|
89
|
-
assert_equal "test.foo.job.backburner-jobs", expand_tube_name(RuntimeError)
|
|
90
|
-
end # class names
|
|
91
|
-
|
|
92
|
-
it "supports lambda in queue object" do
|
|
93
|
-
test = stub(:queue => lambda { |job_class| "email/send_news" })
|
|
94
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name(test)
|
|
95
|
-
end # lambdas in queue object
|
|
96
|
-
|
|
97
|
-
it "supports lambdas" do
|
|
98
|
-
test = lambda { "email/send_news" }
|
|
99
|
-
assert_equal "test.foo.job.email/send-news", expand_tube_name(test)
|
|
100
|
-
end #lambdas
|
|
101
|
-
|
|
102
|
-
it "removes prefix if configured as nil" do
|
|
103
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => nil, :namespace_separator => '.'))
|
|
104
|
-
|
|
105
|
-
test = stub(:queue => "email/send_news")
|
|
106
|
-
assert_equal "email/send-news", expand_tube_name(test)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "removes prefix if configured as false" do
|
|
110
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => false, :namespace_separator => '.'))
|
|
111
|
-
|
|
112
|
-
test = stub(:queue => "email/send_news")
|
|
113
|
-
assert_equal "email/send-news", expand_tube_name(test)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# Tubes of 1.7.0 with an empty namespace hold queued jobs: keep their names
|
|
117
|
-
it "starts names with the separator if configured as empty" do
|
|
118
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => "", :namespace_separator => '.', :primary_queue => "backburner-jobs"))
|
|
119
|
-
|
|
120
|
-
assert_equal ".email/send-news", expand_tube_name("email/send_news")
|
|
121
|
-
assert_equal ".email/send-news", expand_tube_name(stub(:queue => "email/send_news"))
|
|
122
|
-
assert_equal ".backburner-jobs", expand_tube_name(RuntimeError)
|
|
123
|
-
assert_equal ".mailers", expand_tube_name("mailers")
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
# A tube name is where queued jobs wait, so a namespace that works keeps every name it gives, including
|
|
127
|
-
# the odd ones of queue names that start with the namespace ("appmail" -> "app.mail")
|
|
128
|
-
it "keeps the tube names it gives for namespaces without regexp characters other than dots" do
|
|
129
|
-
queues = lambda do |namespace, separator|
|
|
130
|
-
["default", "mailers", "production_mailers", "newsletter_sender", "email/send_news", "Admin::ReportJob",
|
|
131
|
-
"#{namespace}mail", "#{namespace}-reports", "#{namespace.tr('.', '-')}-sync", "#{namespace}#{separator}reports"]
|
|
132
|
-
end
|
|
133
|
-
{
|
|
134
|
-
["backburner.worker.queue", "."] => %w[
|
|
135
|
-
backburner.worker.queue.default backburner.worker.queue.mailers backburner.worker.queue.production-mailers
|
|
136
|
-
backburner.worker.queue.newsletter-sender backburner.worker.queue.email/send-news
|
|
137
|
-
backburner.worker.queue.admin/report-job backburner.worker.queue.mail backburner.worker.queue.-reports
|
|
138
|
-
backburner.worker.queue.-sync backburner.worker.queue.reports backburner.worker.queue.backburner-jobs
|
|
139
|
-
],
|
|
140
|
-
["backburner.worker.queue", "_"] => %w[
|
|
141
|
-
backburner.worker.queue_default backburner.worker.queue_mailers backburner.worker.queue_production-mailers
|
|
142
|
-
backburner.worker.queue_newsletter-sender backburner.worker.queue_email/send-news
|
|
143
|
-
backburner.worker.queue_admin/report-job backburner.worker.queue_mail backburner.worker.queue_-reports
|
|
144
|
-
backburner.worker.queue_-sync backburner.worker.queue_-reports backburner.worker.queue_backburner-jobs
|
|
145
|
-
],
|
|
146
|
-
["backburner", "."] => %w[
|
|
147
|
-
backburner.default backburner.mailers backburner.production-mailers backburner.newsletter-sender
|
|
148
|
-
backburner.email/send-news backburner.admin/report-job backburner.mail backburner.-reports backburner.-sync
|
|
149
|
-
backburner.reports backburner.-jobs
|
|
150
|
-
],
|
|
151
|
-
["backburner", "_"] => %w[
|
|
152
|
-
backburner_default backburner_mailers backburner_production-mailers backburner_newsletter-sender
|
|
153
|
-
backburner_email/send-news backburner_admin/report-job backburner_mail backburner_-reports backburner_-sync
|
|
154
|
-
backburner_-reports backburner_-jobs
|
|
155
|
-
],
|
|
156
|
-
["app", "."] => %w[
|
|
157
|
-
app.default app.mailers app.production-mailers app.newsletter-sender app.email/send-news app.admin/report-job
|
|
158
|
-
app.mail app.-reports app.-sync app.reports app.backburner-jobs
|
|
159
|
-
],
|
|
160
|
-
["app", "_"] => %w[
|
|
161
|
-
app_default app_mailers app_production-mailers app_newsletter-sender app_email/send-news app_admin/report-job
|
|
162
|
-
app_mail app_-reports app_-sync app_-reports app_backburner-jobs
|
|
163
|
-
],
|
|
164
|
-
["app.prod", "."] => %w[
|
|
165
|
-
app.prod.default app.prod.mailers app.prod.production-mailers app.prod.newsletter-sender
|
|
166
|
-
app.prod.email/send-news app.prod.admin/report-job app.prod.mail app.prod.-reports app.prod.-sync
|
|
167
|
-
app.prod.reports app.prod.backburner-jobs
|
|
168
|
-
],
|
|
169
|
-
["app.prod", "_"] => %w[
|
|
170
|
-
app.prod_default app.prod_mailers app.prod_production-mailers app.prod_newsletter-sender
|
|
171
|
-
app.prod_email/send-news app.prod_admin/report-job app.prod_mail app.prod_-reports app.prod_-sync
|
|
172
|
-
app.prod_-reports app.prod_backburner-jobs
|
|
173
|
-
],
|
|
174
|
-
["my-app", "."] => %w[
|
|
175
|
-
my-app.default my-app.mailers my-app.production-mailers my-app.newsletter-sender my-app.email/send-news
|
|
176
|
-
my-app.admin/report-job my-app.mail my-app.-reports my-app.-sync my-app.reports my-app.backburner-jobs
|
|
177
|
-
],
|
|
178
|
-
["my-app", "_"] => %w[
|
|
179
|
-
my-app_default my-app_mailers my-app_production-mailers my-app_newsletter-sender my-app_email/send-news
|
|
180
|
-
my-app_admin/report-job my-app_mail my-app_-reports my-app_-sync my-app_-reports my-app_backburner-jobs
|
|
181
|
-
],
|
|
182
|
-
["MyApp", "."] => %w[
|
|
183
|
-
MyApp.default MyApp.mailers MyApp.production-mailers MyApp.newsletter-sender MyApp.email/send-news
|
|
184
|
-
MyApp.admin/report-job MyApp.my-appmail MyApp.my-app-reports MyApp.my-app-sync MyApp.my-app.reports
|
|
185
|
-
MyApp.backburner-jobs
|
|
186
|
-
],
|
|
187
|
-
["MyApp", "_"] => %w[
|
|
188
|
-
MyApp_default MyApp_mailers MyApp_production-mailers MyApp_newsletter-sender MyApp_email/send-news
|
|
189
|
-
MyApp_admin/report-job MyApp_my-appmail MyApp_my-app-reports MyApp_my-app-sync MyApp_my-app-reports
|
|
190
|
-
MyApp_backburner-jobs
|
|
191
|
-
]
|
|
192
|
-
}.each do |(namespace, separator), tube_names|
|
|
193
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => namespace, :namespace_separator => separator, :primary_queue => "backburner-jobs"))
|
|
194
|
-
assert_equal tube_names, queues.call(namespace, separator).map { |queue| expand_tube_name(queue) } + [expand_tube_name(RuntimeError)],
|
|
195
|
-
[namespace, separator].inspect
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "matches a namespace that isn't a valid regexp literally" do
|
|
200
|
-
{ "app(" => ["app(.default", "app(.mail"], "jobs\\" => ["jobs\\.default", "jobs\\.mail"] }.each do |namespace, tube_names|
|
|
201
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => namespace, :namespace_separator => ".", :primary_queue => "backburner-jobs"))
|
|
202
|
-
assert_equal tube_names, [expand_tube_name("default"), expand_tube_name("#{namespace}mail")], namespace
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
it "uses the bare primary queue without a prefix" do
|
|
207
|
-
[nil, false].each do |namespace|
|
|
208
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => namespace, :namespace_separator => '-', :primary_queue => "backburner-jobs"))
|
|
209
|
-
assert_equal "backburner-jobs", expand_tube_name(RuntimeError), namespace.inspect
|
|
210
|
-
assert_equal "queue-name", expand_tube_name("queue_name"), namespace.inspect
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
end # expand_tube_name
|
|
214
|
-
|
|
215
|
-
describe "for alternative namespace separator" do
|
|
216
|
-
before { Backburner.stubs(:configuration).returns(stub(:tube_namespace => "test", :namespace_separator => '-', :primary_queue => "backburner-jobs")) }
|
|
217
|
-
|
|
218
|
-
it "uses alternative namespace separator" do
|
|
219
|
-
assert_equal "test-queue-name", expand_tube_name("queue_name")
|
|
220
|
-
end # simple string
|
|
221
|
-
|
|
222
|
-
it "joins the namespace and queue name without a separator if configured as empty" do
|
|
223
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => "test", :namespace_separator => '', :primary_queue => "backburner-jobs"))
|
|
224
|
-
assert_equal "testqueue-name", expand_tube_name("queue_name")
|
|
225
|
-
assert_equal "testbackburner-jobs", expand_tube_name(RuntimeError)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "keeps a trailing dot in the namespace when the separator is empty" do
|
|
229
|
-
Backburner.stubs(:configuration).returns(stub(:tube_namespace => "test.", :namespace_separator => '', :primary_queue => "backburner-jobs"))
|
|
230
|
-
assert_equal "test.queue-name", expand_tube_name("queue_name")
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
describe "for resolve_priority method" do
|
|
235
|
-
before do
|
|
236
|
-
@original_queue_priority = Backburner.configuration.default_priority
|
|
237
|
-
Backburner.configure { |config| config.default_priority = 1000 }
|
|
238
|
-
end
|
|
239
|
-
after do
|
|
240
|
-
Backburner.configure { |config| config.default_priority = @original_queue_priority }
|
|
241
|
-
Backburner.configure { |config| config.priority_labels = Backburner::Configuration::PRIORITY_LABELS }
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
it "supports fix num priority" do
|
|
245
|
-
assert_equal 500, resolve_priority(500)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it "supports baked in priority alias" do
|
|
249
|
-
assert_equal 200, resolve_priority(:low)
|
|
250
|
-
assert_equal 0, resolve_priority(:high)
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "supports custom priority alias" do
|
|
254
|
-
Backburner.configure { |config| config.priority_labels = { :foo => 5 } }
|
|
255
|
-
assert_equal 5, resolve_priority(:foo)
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "supports aliased priority alias" do
|
|
259
|
-
Backburner.configure { |config| config.priority_labels = { :foo => 5, :bar => 'foo' } }
|
|
260
|
-
assert_equal 5, resolve_priority(:bar)
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
it "supports classes which respond to queue_priority" do
|
|
264
|
-
job = stub(:queue_priority => 600)
|
|
265
|
-
assert_equal 600, resolve_priority(job)
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "supports classes which respond to queue_priority with named alias" do
|
|
269
|
-
job = stub(:queue_priority => :low)
|
|
270
|
-
assert_equal 200, resolve_priority(job)
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
it "supports classes which returns null queue_priority" do
|
|
274
|
-
job = stub(:queue_priority => nil)
|
|
275
|
-
assert_equal 1000, resolve_priority(job)
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
it "supports classes which don't respond to queue_priority" do
|
|
279
|
-
job = stub(:fake => true)
|
|
280
|
-
assert_equal 1000, resolve_priority(job)
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
it "supports default pri for null values" do
|
|
284
|
-
assert_equal 1000, resolve_priority(nil)
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
it "supports a priority label as the default" do
|
|
288
|
-
Backburner.configure { |config| config.default_priority = :high }
|
|
289
|
-
assert_equal 0, resolve_priority(nil)
|
|
290
|
-
assert_equal 0, resolve_priority(stub(:queue_priority => nil))
|
|
291
|
-
assert_equal 0, resolve_priority(:unknown_label)
|
|
292
|
-
assert_equal 200, resolve_priority(:low)
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
it "supports a custom or aliased priority label as the default" do
|
|
296
|
-
Backburner.configure { |config| config.priority_labels = { :foo => 5, :bar => 'foo' }; config.default_priority = 'bar' }
|
|
297
|
-
assert_equal 5, resolve_priority(nil)
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
it "leaves an unknown default label as configured" do
|
|
301
|
-
Backburner.configure { |config| config.default_priority = :unknown_label }
|
|
302
|
-
assert_equal :unknown_label, resolve_priority(nil)
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
it "stops at a cycle of priority labels" do
|
|
306
|
-
Backburner.configure { |config| config.priority_labels = { :a => :b, :b => 'a' }; config.default_priority = :a }
|
|
307
|
-
assert_equal :a, resolve_priority(nil), "a default label cycle is left as configured"
|
|
308
|
-
Backburner.configure { |config| config.default_priority = 1000 }
|
|
309
|
-
assert_equal 1000, resolve_priority(:b), "a job label cycle falls back to the default"
|
|
310
|
-
end
|
|
311
|
-
end # resolve_priority
|
|
312
|
-
|
|
313
|
-
describe "for resolve_respond_timeout method" do
|
|
314
|
-
before do
|
|
315
|
-
@original_respond_timeout = Backburner.configuration.respond_timeout
|
|
316
|
-
Backburner.configure { |config| config.respond_timeout = 300 }
|
|
317
|
-
end
|
|
318
|
-
after { Backburner.configure { |config| config.respond_timeout = @original_respond_timeout } }
|
|
319
|
-
|
|
320
|
-
it "supports fix num respond_timeout" do
|
|
321
|
-
assert_equal 500, resolve_respond_timeout(500)
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
it "supports classes which respond to queue_respond_timeout" do
|
|
325
|
-
job = stub(:queue_respond_timeout => 600)
|
|
326
|
-
assert_equal 600, resolve_respond_timeout(job)
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
it "supports classes which returns null queue_respond_timeout" do
|
|
330
|
-
job = stub(:queue_respond_timeout => nil)
|
|
331
|
-
assert_equal 300, resolve_respond_timeout(job)
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
it "supports classes which don't respond to queue_respond_timeout" do
|
|
335
|
-
job = stub(:fake => true)
|
|
336
|
-
assert_equal 300, resolve_respond_timeout(job)
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
it "supports default ttr for null values" do
|
|
340
|
-
assert_equal 300, resolve_respond_timeout(nil)
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
it "rounds a fractional respond_timeout up to whole seconds, from a value, a class or the default" do
|
|
344
|
-
assert_equal 1, resolve_respond_timeout(0.2)
|
|
345
|
-
assert_equal 2, resolve_respond_timeout(stub(:queue_respond_timeout => 1.5))
|
|
346
|
-
Backburner.configure { |config| config.respond_timeout = 2.5 }
|
|
347
|
-
assert_equal 3, resolve_respond_timeout(nil)
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
it "keeps an Integer as it is and ignores a value that isn't finite, as before" do
|
|
351
|
-
assert_equal(-5, resolve_respond_timeout(-5))
|
|
352
|
-
assert_equal 300, resolve_respond_timeout(Float::INFINITY)
|
|
353
|
-
assert_equal 300, resolve_respond_timeout(stub(:queue_respond_timeout => Float::NAN))
|
|
354
|
-
end
|
|
355
|
-
end # resolve_respond_timeout
|
|
356
|
-
|
|
357
|
-
describe "for resolve_max_job_retries method" do
|
|
358
|
-
before do
|
|
359
|
-
@original_max_job_retries = Backburner.configuration.max_job_retries
|
|
360
|
-
Backburner.configure { |config| config.max_job_retries = 300 }
|
|
361
|
-
end
|
|
362
|
-
after { Backburner.configure { |config| config.max_job_retries = @original_max_job_retries } }
|
|
363
|
-
|
|
364
|
-
it "supports fix num max_job_retries" do
|
|
365
|
-
assert_equal 500, resolve_max_job_retries(500)
|
|
366
|
-
end
|
|
367
|
-
|
|
368
|
-
it "supports classes which respond to queue_max_job_retries" do
|
|
369
|
-
job = stub(:queue_max_job_retries => 600)
|
|
370
|
-
assert_equal 600, resolve_max_job_retries(job)
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
it "supports classes which return null queue_max_job_retries" do
|
|
374
|
-
job = stub(:queue_max_job_retries => nil)
|
|
375
|
-
assert_equal 300, resolve_max_job_retries(job)
|
|
376
|
-
end
|
|
377
|
-
|
|
378
|
-
it "supports classes which don't respond to queue_max_job_retries" do
|
|
379
|
-
job = stub(:fake => true)
|
|
380
|
-
assert_equal 300, resolve_max_job_retries(job)
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
it "supports default max_job_retries for null values" do
|
|
384
|
-
assert_equal 300, resolve_max_job_retries(nil)
|
|
385
|
-
end
|
|
386
|
-
end # resolve_max_job_retries
|
|
387
|
-
|
|
388
|
-
describe "for resolve_retry_delay method" do
|
|
389
|
-
before do
|
|
390
|
-
@original_retry_delay = Backburner.configuration.retry_delay
|
|
391
|
-
Backburner.configure { |config| config.retry_delay = 300 }
|
|
392
|
-
end
|
|
393
|
-
after { Backburner.configure { |config| config.retry_delay = @original_retry_delay } }
|
|
394
|
-
|
|
395
|
-
it "ignores a retry_delay that isn't finite, as before" do
|
|
396
|
-
assert_equal 300, resolve_retry_delay(stub(:queue_retry_delay => Float::NAN))
|
|
397
|
-
assert_equal 300, resolve_retry_delay(Float::INFINITY)
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
it "supports fix num retry_delay" do
|
|
401
|
-
assert_equal 500, resolve_retry_delay(500)
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
it "supports classes which respond to queue_retry_delay" do
|
|
405
|
-
job = stub(:queue_retry_delay => 600)
|
|
406
|
-
assert_equal 600, resolve_retry_delay(job)
|
|
407
|
-
end
|
|
408
|
-
|
|
409
|
-
it "supports classes which return null queue_retry_delay" do
|
|
410
|
-
job = stub(:queue_retry_delay => nil)
|
|
411
|
-
assert_equal 300, resolve_retry_delay(job)
|
|
412
|
-
end
|
|
413
|
-
|
|
414
|
-
it "supports classes which don't respond to queue_retry_delay" do
|
|
415
|
-
job = stub(:fake => true)
|
|
416
|
-
assert_equal 300, resolve_retry_delay(job)
|
|
417
|
-
end
|
|
418
|
-
|
|
419
|
-
it "supports default retry_delay for null values" do
|
|
420
|
-
assert_equal 300, resolve_retry_delay(nil)
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
it "supports a fractional retry_delay from a value or a class" do
|
|
424
|
-
assert_equal 2.5, resolve_retry_delay(2.5)
|
|
425
|
-
assert_equal 1.5, resolve_retry_delay(stub(:queue_retry_delay => 1.5))
|
|
426
|
-
end
|
|
427
|
-
end # resolve_retry_delay
|
|
428
|
-
|
|
429
|
-
describe "for resolve_retry_delay_proc method" do
|
|
430
|
-
before do
|
|
431
|
-
@config_retry_delay_proc = lambda { |x, y| x + y } # Default config proc adds two values
|
|
432
|
-
@override_delay_proc = lambda { |x, y| x - y } # Overriden proc subtracts values
|
|
433
|
-
@original_retry_delay_proc = Backburner.configuration.retry_delay_proc
|
|
434
|
-
Backburner.configure { |config| config.retry_delay_proc = @config_retry_delay_proc }
|
|
435
|
-
end
|
|
436
|
-
after { Backburner.configure { |config| config.retry_delay_proc = @original_retry_delay_proc } }
|
|
437
|
-
|
|
438
|
-
# Rather than compare Procs execute them and compare the output
|
|
439
|
-
it "supports proc retry_delay_proc" do
|
|
440
|
-
assert_equal @override_delay_proc.call(2, 1), resolve_retry_delay_proc(@override_delay_proc).call(2, 1)
|
|
441
|
-
end
|
|
442
|
-
|
|
443
|
-
it "supports classes which respond to queue_retry_delay_proc" do
|
|
444
|
-
job = stub(:queue_retry_delay_proc => @override_delay_proc)
|
|
445
|
-
assert_equal @override_delay_proc.call(2, 1), resolve_retry_delay_proc(job).call(2, 1)
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
it "supports classes which return null queue_retry_delay_proc" do
|
|
449
|
-
job = stub(:queue_retry_delay_proc => nil)
|
|
450
|
-
assert_equal @original_retry_delay_proc.call(2, 1), resolve_retry_delay_proc(job).call(2, 1)
|
|
451
|
-
end
|
|
452
|
-
|
|
453
|
-
it "supports classes which don't respond to queue_retry_delay_proc" do
|
|
454
|
-
job = stub(:fake => true)
|
|
455
|
-
assert_equal @original_retry_delay_proc.call(2, 1), resolve_retry_delay_proc(job).call(2, 1)
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
it "supports default retry_delay_proc for null values" do
|
|
459
|
-
assert_equal @original_retry_delay_proc.call(2, 1), resolve_retry_delay_proc(nil).call(2, 1)
|
|
460
|
-
end
|
|
461
|
-
end # resolve_retry_delay_proc
|
|
462
|
-
end
|
data/test/hooks_test.rb
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
|
2
|
-
require File.expand_path('../fixtures/hooked', __FILE__)
|
|
3
|
-
|
|
4
|
-
describe "Backburner::Hooks module" do
|
|
5
|
-
before do
|
|
6
|
-
$hooked_fail_count = 0
|
|
7
|
-
@hooks = Backburner::Hooks
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
describe "for invoke_hook_events method" do
|
|
11
|
-
describe "with before_enqueue" do
|
|
12
|
-
it "should support successful invocation" do
|
|
13
|
-
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectSuccess, :before_enqueue, 5, 6) }
|
|
14
|
-
assert_equal [nil, nil], @res
|
|
15
|
-
assert_match(/!!before_enqueue_foo!! \[5\, 6\]/, out)
|
|
16
|
-
assert_match(/!!before_enqueue_bar!! \[5\, 6\]/, out)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should support fail case" do
|
|
20
|
-
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectBeforeEnqueueFail, :before_enqueue, 5, 6) }
|
|
21
|
-
assert_equal false, @res
|
|
22
|
-
assert_match(/!!before_enqueue_foo!! \[5\, 6\]/, out)
|
|
23
|
-
end
|
|
24
|
-
end # before_enqueue
|
|
25
|
-
|
|
26
|
-
describe "with after_enqueue" do
|
|
27
|
-
it "should support successful invocation" do
|
|
28
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :after_enqueue, 7, 8) }
|
|
29
|
-
assert_match(/!!after_enqueue_foo!! \[7\, 8\]/, out)
|
|
30
|
-
assert_match(/!!after_enqueue_bar!! \[7\, 8\]/, out)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should support fail case" do
|
|
34
|
-
assert_raises(HookFailError) do
|
|
35
|
-
silenced { @res = @hooks.invoke_hook_events(HookedObjectAfterEnqueueFail, :after_enqueue, 5, 6) }
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end # after_enqueue
|
|
39
|
-
|
|
40
|
-
describe "with before_perform" do
|
|
41
|
-
it "should support successful invocation" do
|
|
42
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :before_perform, 1, 2) }
|
|
43
|
-
assert_match(/!!before_perform_foo!! \[1\, 2\]/, out)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should support fail case" do
|
|
47
|
-
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectBeforePerformFail, :before_perform, 5, 6) }
|
|
48
|
-
assert_equal false, @res
|
|
49
|
-
assert_match(/!!before_perform_foo!! \[5\, 6\]/, out)
|
|
50
|
-
end
|
|
51
|
-
end # before_perform
|
|
52
|
-
|
|
53
|
-
describe "with after_perform" do
|
|
54
|
-
it "should support successful invocation" do
|
|
55
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :after_perform, 3, 4) }
|
|
56
|
-
assert_match(/!!after_perform_foo!! \[3\, 4\]/, out)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should support fail case" do
|
|
60
|
-
assert_raises(HookFailError) do
|
|
61
|
-
silenced { @res = @hooks.invoke_hook_events(HookedObjectAfterPerformFail, :after_perform, 5, 6) }
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end # after_perform
|
|
65
|
-
|
|
66
|
-
describe "with on_failure" do
|
|
67
|
-
it "should support successful invocation" do
|
|
68
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :on_failure, RuntimeError, 10) }
|
|
69
|
-
assert_match(/!!on_failure_foo!! RuntimeError \[10\]/, out)
|
|
70
|
-
end
|
|
71
|
-
end # on_failure
|
|
72
|
-
|
|
73
|
-
describe 'with on_retry' do
|
|
74
|
-
it "should support successful invocation" do
|
|
75
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :on_retry, 1, 0, 10) }
|
|
76
|
-
assert_match(/!!on_retry_foo!! 1 0 \[10\]/, out)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe 'with on_bury' do
|
|
81
|
-
it "should support successful invocation" do
|
|
82
|
-
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :on_bury, 10) }
|
|
83
|
-
assert_match(/!!on_bury_foo!! \[10\]/, out)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe "with on_reconnect" do
|
|
88
|
-
it "should support successful invocation" do
|
|
89
|
-
out = silenced { @hooks.invoke_hook_events(HookedWorker.new, :on_reconnect)}
|
|
90
|
-
assert_match(/!!on_reconnect!!/, out)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end # invoke_hook_events
|
|
94
|
-
|
|
95
|
-
describe "for around_hook_events method" do
|
|
96
|
-
describe "with around_perform" do
|
|
97
|
-
it "should support successful invocation" do
|
|
98
|
-
out = silenced do
|
|
99
|
-
@hooks.around_hook_events(HookedObjectSuccess, :around_perform, 7, 8) {
|
|
100
|
-
puts "!!FIRED!!"
|
|
101
|
-
}
|
|
102
|
-
end
|
|
103
|
-
assert_match(/BEGIN.*?bar.*BEGIN.*cat.*FIRED.*END.*cat.*END.*bar/m, out)
|
|
104
|
-
assert_match(/!!BEGIN around_perform_bar!! \[7\, 8\]/, out)
|
|
105
|
-
assert_match(/!!BEGIN around_perform_cat!! \[7\, 8\]/, out)
|
|
106
|
-
assert_match(/!!FIRED!!/, out)
|
|
107
|
-
assert_match(/!!END around_perform_cat!! \[7\, 8\]/, out)
|
|
108
|
-
assert_match(/!!END around_perform_bar!! \[7\, 8\]/, out)
|
|
109
|
-
end
|
|
110
|
-
end # successful
|
|
111
|
-
end # around_hook_events
|
|
112
|
-
end # Hooks
|