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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -4
  3. data/README.md +70 -14
  4. data/lib/active_job/queue_adapters/backburner_adapter.rb +9 -2
  5. data/lib/backburner/cli.rb +1 -1
  6. data/lib/backburner/enqueue_pool.rb +2 -0
  7. data/lib/backburner/performable.rb +28 -3
  8. data/lib/backburner/version.rb +1 -1
  9. data/lib/backburner/worker.rb +38 -4
  10. data/lib/backburner/workers/threading.rb +16 -0
  11. data/lib/backburner/workers/threads_on_fork.rb +1 -0
  12. metadata +8 -82
  13. data/.github/workflows/ci.yml +0 -45
  14. data/.github/workflows/github-release.yml +0 -58
  15. data/.github/workflows/release.yml +0 -221
  16. data/.gitignore +0 -17
  17. data/CONTRIBUTING.md +0 -37
  18. data/Gemfile +0 -7
  19. data/Rakefile +0 -17
  20. data/TODO +0 -4
  21. data/backburner.gemspec +0 -31
  22. data/examples/custom.rb +0 -25
  23. data/examples/demo.rb +0 -60
  24. data/examples/god.rb +0 -46
  25. data/examples/hooked.rb +0 -87
  26. data/examples/retried.rb +0 -31
  27. data/examples/simple.rb +0 -43
  28. data/examples/stress.rb +0 -31
  29. data/test/active_job_adapter_test.rb +0 -24
  30. data/test/async_proxy_test.rb +0 -36
  31. data/test/back_burner_test.rb +0 -101
  32. data/test/connection_test.rb +0 -201
  33. data/test/fixtures/active_job_app.rb +0 -53
  34. data/test/fixtures/active_jobs.rb +0 -11
  35. data/test/fixtures/autoload/test_broken_name_job.rb +0 -4
  36. data/test/fixtures/autoload/test_broken_no_method_job.rb +0 -4
  37. data/test/fixtures/autoload/test_broken_require_job.rb +0 -4
  38. data/test/fixtures/autoload/test_broken_runtime_job.rb +0 -4
  39. data/test/fixtures/autoload/test_broken_syntax_job.rb +0 -4
  40. data/test/fixtures/autoload/test_broken_timeout_job.rb +0 -4
  41. data/test/fixtures/autoload/test_same_name_job.rb +0 -5
  42. data/test/fixtures/hooked.rb +0 -122
  43. data/test/fixtures/test_fork_jobs.rb +0 -77
  44. data/test/fixtures/test_forking_jobs.rb +0 -56
  45. data/test/fixtures/test_jobs.rb +0 -140
  46. data/test/fixtures/test_queue_settings.rb +0 -54
  47. data/test/helpers/templogger.rb +0 -22
  48. data/test/helpers_test.rb +0 -462
  49. data/test/hooks_test.rb +0 -112
  50. data/test/job_test.rb +0 -207
  51. data/test/logger_test.rb +0 -71
  52. data/test/performable_test.rb +0 -138
  53. data/test/queue_test.rb +0 -132
  54. data/test/test_helper.rb +0 -182
  55. data/test/worker_test.rb +0 -502
  56. data/test/workers/forking_worker_test.rb +0 -199
  57. data/test/workers/simple_worker_test.rb +0 -622
  58. data/test/workers/threading_worker_test.rb +0 -125
  59. 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