resque_sqs 1.25.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY.md +467 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +866 -0
  5. data/Rakefile +70 -0
  6. data/bin/resque-sqs +81 -0
  7. data/bin/resque-sqs-web +27 -0
  8. data/lib/resque_sqs/errors.rb +13 -0
  9. data/lib/resque_sqs/failure/airbrake.rb +33 -0
  10. data/lib/resque_sqs/failure/base.rb +73 -0
  11. data/lib/resque_sqs/failure/multiple.rb +59 -0
  12. data/lib/resque_sqs/failure/redis.rb +108 -0
  13. data/lib/resque_sqs/failure/redis_multi_queue.rb +89 -0
  14. data/lib/resque_sqs/failure.rb +113 -0
  15. data/lib/resque_sqs/helpers.rb +107 -0
  16. data/lib/resque_sqs/job.rb +346 -0
  17. data/lib/resque_sqs/log_formatters/quiet_formatter.rb +7 -0
  18. data/lib/resque_sqs/log_formatters/verbose_formatter.rb +7 -0
  19. data/lib/resque_sqs/log_formatters/very_verbose_formatter.rb +8 -0
  20. data/lib/resque_sqs/logging.rb +18 -0
  21. data/lib/resque_sqs/plugin.rb +66 -0
  22. data/lib/resque_sqs/server/helpers.rb +52 -0
  23. data/lib/resque_sqs/server/public/favicon.ico +0 -0
  24. data/lib/resque_sqs/server/public/idle.png +0 -0
  25. data/lib/resque_sqs/server/public/jquery-1.3.2.min.js +19 -0
  26. data/lib/resque_sqs/server/public/jquery.relatize_date.js +95 -0
  27. data/lib/resque_sqs/server/public/poll.png +0 -0
  28. data/lib/resque_sqs/server/public/ranger.js +78 -0
  29. data/lib/resque_sqs/server/public/reset.css +44 -0
  30. data/lib/resque_sqs/server/public/style.css +91 -0
  31. data/lib/resque_sqs/server/public/working.png +0 -0
  32. data/lib/resque_sqs/server/test_helper.rb +19 -0
  33. data/lib/resque_sqs/server/views/error.erb +1 -0
  34. data/lib/resque_sqs/server/views/failed.erb +29 -0
  35. data/lib/resque_sqs/server/views/failed_job.erb +50 -0
  36. data/lib/resque_sqs/server/views/failed_queues_overview.erb +24 -0
  37. data/lib/resque_sqs/server/views/key_sets.erb +19 -0
  38. data/lib/resque_sqs/server/views/key_string.erb +11 -0
  39. data/lib/resque_sqs/server/views/layout.erb +44 -0
  40. data/lib/resque_sqs/server/views/next_more.erb +22 -0
  41. data/lib/resque_sqs/server/views/overview.erb +4 -0
  42. data/lib/resque_sqs/server/views/queues.erb +58 -0
  43. data/lib/resque_sqs/server/views/stats.erb +62 -0
  44. data/lib/resque_sqs/server/views/workers.erb +109 -0
  45. data/lib/resque_sqs/server/views/working.erb +72 -0
  46. data/lib/resque_sqs/server.rb +271 -0
  47. data/lib/resque_sqs/stat.rb +57 -0
  48. data/lib/resque_sqs/tasks.rb +83 -0
  49. data/lib/resque_sqs/vendor/utf8_util/utf8_util_18.rb +91 -0
  50. data/lib/resque_sqs/vendor/utf8_util/utf8_util_19.rb +5 -0
  51. data/lib/resque_sqs/vendor/utf8_util.rb +20 -0
  52. data/lib/resque_sqs/version.rb +3 -0
  53. data/lib/resque_sqs/worker.rb +779 -0
  54. data/lib/resque_sqs.rb +479 -0
  55. data/lib/tasks/redis_sqs.rake +161 -0
  56. data/lib/tasks/resque_sqs.rake +2 -0
  57. data/test/airbrake_test.rb +27 -0
  58. data/test/failure_base_test.rb +15 -0
  59. data/test/job_hooks_test.rb +465 -0
  60. data/test/job_plugins_test.rb +230 -0
  61. data/test/logging_test.rb +24 -0
  62. data/test/plugin_test.rb +116 -0
  63. data/test/redis-test-cluster.conf +115 -0
  64. data/test/redis-test.conf +115 -0
  65. data/test/resque-web_test.rb +59 -0
  66. data/test/resque_failure_redis_test.rb +19 -0
  67. data/test/resque_hook_test.rb +165 -0
  68. data/test/resque_test.rb +278 -0
  69. data/test/stdout +42 -0
  70. data/test/test_helper.rb +228 -0
  71. data/test/worker_test.rb +1080 -0
  72. metadata +202 -0
@@ -0,0 +1,465 @@
1
+ require 'test_helper'
2
+
3
+ context "ResqueSqs::Job before_perform" do
4
+ include PerformJob
5
+
6
+ class ::BeforePerformJob
7
+ def self.before_perform_record_history(history)
8
+ history << :before_perform
9
+ end
10
+
11
+ def self.perform(history)
12
+ history << :perform
13
+ end
14
+ end
15
+
16
+ test "it runs before_perform before perform" do
17
+ result = perform_job(BeforePerformJob, history=[])
18
+ assert_equal true, result, "perform returned true"
19
+ assert_equal history, [:before_perform, :perform]
20
+ end
21
+
22
+ class ::BeforePerformJobFails
23
+ def self.before_perform_fail_job(history)
24
+ history << :before_perform
25
+ raise StandardError
26
+ end
27
+ def self.perform(history)
28
+ history << :perform
29
+ end
30
+ end
31
+
32
+ test "raises an error and does not perform if before_perform fails" do
33
+ history = []
34
+ assert_raises StandardError do
35
+ perform_job(BeforePerformJobFails, history)
36
+ end
37
+ assert_equal history, [:before_perform], "Only before_perform was run"
38
+ end
39
+
40
+ class ::BeforePerformJobAborts
41
+ def self.before_perform_abort(history)
42
+ history << :before_perform
43
+ raise ResqueSqs::Job::DontPerform
44
+ end
45
+ def self.perform(history)
46
+ history << :perform
47
+ end
48
+ end
49
+
50
+ test "does not perform if before_perform raises ResqueSqs::Job::DontPerform" do
51
+ result = perform_job(BeforePerformJobAborts, history=[])
52
+ assert_equal false, result, "perform returned false"
53
+ assert_equal history, [:before_perform], "Only before_perform was run"
54
+ end
55
+ end
56
+
57
+ context "ResqueSqs::Job after_perform" do
58
+ include PerformJob
59
+
60
+ class ::AfterPerformJob
61
+ def self.perform(history)
62
+ history << :perform
63
+ end
64
+ def self.after_perform_record_history(history)
65
+ history << :after_perform
66
+ end
67
+ end
68
+
69
+ test "it runs after_perform after perform" do
70
+ result = perform_job(AfterPerformJob, history=[])
71
+ assert_equal true, result, "perform returned true"
72
+ assert_equal history, [:perform, :after_perform]
73
+ end
74
+
75
+ class ::AfterPerformJobFails
76
+ def self.perform(history)
77
+ history << :perform
78
+ end
79
+ def self.after_perform_fail_job(history)
80
+ history << :after_perform
81
+ raise StandardError
82
+ end
83
+ end
84
+
85
+ test "raises an error but has already performed if after_perform fails" do
86
+ history = []
87
+ assert_raises StandardError do
88
+ perform_job(AfterPerformJobFails, history)
89
+ end
90
+ assert_equal history, [:perform, :after_perform], "Only after_perform was run"
91
+ end
92
+ end
93
+
94
+ context "ResqueSqs::Job around_perform" do
95
+ include PerformJob
96
+
97
+ class ::AroundPerformJob
98
+ def self.perform(history)
99
+ history << :perform
100
+ end
101
+ def self.around_perform_record_history(history)
102
+ history << :start_around_perform
103
+ yield
104
+ history << :finish_around_perform
105
+ end
106
+ end
107
+
108
+ test "it runs around_perform then yields in order to perform" do
109
+ result = perform_job(AroundPerformJob, history=[])
110
+ assert_equal true, result, "perform returned true"
111
+ assert_equal history, [:start_around_perform, :perform, :finish_around_perform]
112
+ end
113
+
114
+ class ::AroundPerformJobFailsBeforePerforming
115
+ def self.perform(history)
116
+ history << :perform
117
+ end
118
+ def self.around_perform_fail(history)
119
+ history << :start_around_perform
120
+ raise StandardError
121
+ yield
122
+ history << :finish_around_perform
123
+ end
124
+ end
125
+
126
+ test "raises an error and does not perform if around_perform fails before yielding" do
127
+ history = []
128
+ assert_raises StandardError do
129
+ perform_job(AroundPerformJobFailsBeforePerforming, history)
130
+ end
131
+ assert_equal history, [:start_around_perform], "Only part of around_perform was run"
132
+ end
133
+
134
+ class ::AroundPerformJobFailsWhilePerforming
135
+ def self.perform(history)
136
+ history << :perform
137
+ raise StandardError
138
+ end
139
+ def self.around_perform_fail_in_yield(history)
140
+ history << :start_around_perform
141
+ begin
142
+ yield
143
+ ensure
144
+ history << :ensure_around_perform
145
+ end
146
+ history << :finish_around_perform
147
+ end
148
+ end
149
+
150
+ test "raises an error but may handle exceptions if perform fails" do
151
+ history = []
152
+ assert_raises StandardError do
153
+ perform_job(AroundPerformJobFailsWhilePerforming, history)
154
+ end
155
+ assert_equal history, [:start_around_perform, :perform, :ensure_around_perform], "Only part of around_perform was run"
156
+ end
157
+
158
+ class ::AroundPerformJobDoesNotHaveToYield
159
+ def self.perform(history)
160
+ history << :perform
161
+ end
162
+ def self.around_perform_dont_yield(history)
163
+ history << :start_around_perform
164
+ history << :finish_around_perform
165
+ end
166
+ end
167
+
168
+ test "around_perform is not required to yield" do
169
+ history = []
170
+ result = perform_job(AroundPerformJobDoesNotHaveToYield, history)
171
+ assert_equal false, result, "perform returns false"
172
+ assert_equal history, [:start_around_perform, :finish_around_perform], "perform was not run"
173
+ end
174
+ end
175
+
176
+ context "ResqueSqs::Job on_failure" do
177
+ include PerformJob
178
+
179
+ class ::FailureJobThatDoesNotFail
180
+ def self.perform(history)
181
+ history << :perform
182
+ end
183
+ def self.on_failure_record_failure(exception, history)
184
+ history << exception.message
185
+ end
186
+ end
187
+
188
+ test "it does not call on_failure if no failures occur" do
189
+ result = perform_job(FailureJobThatDoesNotFail, history=[])
190
+ assert_equal true, result, "perform returned true"
191
+ assert_equal history, [:perform]
192
+ end
193
+
194
+ class ::FailureJobThatFails
195
+ def self.perform(history)
196
+ history << :perform
197
+ raise StandardError, "oh no"
198
+ end
199
+ def self.on_failure_record_failure(exception, history)
200
+ history << exception.message
201
+ end
202
+ end
203
+
204
+ test "it calls on_failure with the exception and then re-raises the exception" do
205
+ history = []
206
+ assert_raises StandardError do
207
+ perform_job(FailureJobThatFails, history)
208
+ end
209
+ assert_equal history, [:perform, "oh no"]
210
+ end
211
+
212
+ class ::FailureJobThatFailsBadly
213
+ def self.perform(history)
214
+ history << :perform
215
+ raise SyntaxError, "oh no"
216
+ end
217
+ def self.on_failure_record_failure(exception, history)
218
+ history << exception.message
219
+ end
220
+ end
221
+
222
+ test "it calls on_failure even with bad exceptions" do
223
+ history = []
224
+ assert_raises SyntaxError do
225
+ perform_job(FailureJobThatFailsBadly, history)
226
+ end
227
+ assert_equal history, [:perform, "oh no"]
228
+ end
229
+ end
230
+
231
+ context "ResqueSqs::Job after_enqueue" do
232
+ include PerformJob
233
+
234
+ class ::AfterEnqueueJob
235
+ @queue = :jobs
236
+ def self.after_enqueue_record_history(history)
237
+ history << :after_enqueue
238
+ end
239
+
240
+ def self.perform(history)
241
+ end
242
+ end
243
+
244
+ test "the after enqueue hook should run" do
245
+ history = []
246
+ @worker = ResqueSqs::Worker.new(:jobs)
247
+ ResqueSqs.enqueue(AfterEnqueueJob, history)
248
+ @worker.work(0)
249
+ assert_equal history, [:after_enqueue], "after_enqueue was not run"
250
+ end
251
+ end
252
+
253
+
254
+ context "ResqueSqs::Job before_enqueue" do
255
+ include PerformJob
256
+
257
+ class ::BeforeEnqueueJob
258
+ @queue = :jobs
259
+ def self.before_enqueue_record_history(history)
260
+ history << :before_enqueue
261
+ end
262
+
263
+ def self.perform(history)
264
+ end
265
+ end
266
+
267
+ class ::BeforeEnqueueJobAbort
268
+ @queue = :jobs
269
+ def self.before_enqueue_abort(history)
270
+ false
271
+ end
272
+
273
+ def self.perform(history)
274
+ end
275
+ end
276
+
277
+ test "the before enqueue hook should run" do
278
+ history = []
279
+ @worker = ResqueSqs::Worker.new(:jobs)
280
+ assert ResqueSqs.enqueue(BeforeEnqueueJob, history)
281
+ @worker.work(0)
282
+ assert_equal history, [:before_enqueue], "before_enqueue was not run"
283
+ end
284
+
285
+ test "a before enqueue hook that returns false should prevent the job from getting queued" do
286
+ ResqueSqs.remove_queue(:jobs)
287
+ history = []
288
+ @worker = ResqueSqs::Worker.new(:jobs)
289
+ assert_nil ResqueSqs.enqueue(BeforeEnqueueJobAbort, history)
290
+ assert_equal 0, ResqueSqs.size(:jobs)
291
+ end
292
+ end
293
+
294
+ context "ResqueSqs::Job after_dequeue" do
295
+ include PerformJob
296
+
297
+ class ::AfterDequeueJob
298
+ @queue = :jobs
299
+ def self.after_dequeue_record_history(history)
300
+ history << :after_dequeue
301
+ end
302
+
303
+ def self.perform(history)
304
+ end
305
+ end
306
+
307
+ test "the after dequeue hook should run" do
308
+ history = []
309
+ @worker = ResqueSqs::Worker.new(:jobs)
310
+ ResqueSqs.dequeue(AfterDequeueJob, history)
311
+ @worker.work(0)
312
+ assert_equal history, [:after_dequeue], "after_dequeue was not run"
313
+ end
314
+ end
315
+
316
+
317
+ context "ResqueSqs::Job before_dequeue" do
318
+ include PerformJob
319
+
320
+ class ::BeforeDequeueJob
321
+ @queue = :jobs
322
+ def self.before_dequeue_record_history(history)
323
+ history << :before_dequeue
324
+ end
325
+
326
+ def self.perform(history)
327
+ end
328
+ end
329
+
330
+ class ::BeforeDequeueJobAbort
331
+ @queue = :jobs
332
+ def self.before_dequeue_abort(history)
333
+ false
334
+ end
335
+
336
+ def self.perform(history)
337
+ end
338
+ end
339
+
340
+ test "the before dequeue hook should run" do
341
+ history = []
342
+ @worker = ResqueSqs::Worker.new(:jobs)
343
+ ResqueSqs.dequeue(BeforeDequeueJob, history)
344
+ @worker.work(0)
345
+ assert_equal history, [:before_dequeue], "before_dequeue was not run"
346
+ end
347
+
348
+ test "a before dequeue hook that returns false should prevent the job from getting dequeued" do
349
+ history = []
350
+ assert_equal nil, ResqueSqs.dequeue(BeforeDequeueJobAbort, history)
351
+ end
352
+ end
353
+
354
+ context "ResqueSqs::Job all hooks" do
355
+ include PerformJob
356
+
357
+ class ::VeryHookyJob
358
+ def self.before_perform_record_history(history)
359
+ history << :before_perform
360
+ end
361
+ def self.around_perform_record_history(history)
362
+ history << :start_around_perform
363
+ yield
364
+ history << :finish_around_perform
365
+ end
366
+ def self.perform(history)
367
+ history << :perform
368
+ end
369
+ def self.after_perform_record_history(history)
370
+ history << :after_perform
371
+ end
372
+ def self.on_failure_record_history(exception, history)
373
+ history << exception.message
374
+ end
375
+ end
376
+
377
+ test "the complete hook order" do
378
+ result = perform_job(VeryHookyJob, history=[])
379
+ assert_equal true, result, "perform returned true"
380
+ assert_equal history, [
381
+ :before_perform,
382
+ :start_around_perform,
383
+ :perform,
384
+ :finish_around_perform,
385
+ :after_perform
386
+ ]
387
+ end
388
+
389
+ class ::VeryHookyJobThatFails
390
+ def self.before_perform_record_history(history)
391
+ history << :before_perform
392
+ end
393
+ def self.around_perform_record_history(history)
394
+ history << :start_around_perform
395
+ yield
396
+ history << :finish_around_perform
397
+ end
398
+ def self.perform(history)
399
+ history << :perform
400
+ end
401
+ def self.after_perform_record_history(history)
402
+ history << :after_perform
403
+ raise StandardError, "oh no"
404
+ end
405
+ def self.on_failure_record_history(exception, history)
406
+ history << exception.message
407
+ end
408
+ end
409
+
410
+ test "the complete hook order with a failure at the last minute" do
411
+ history = []
412
+ assert_raises StandardError do
413
+ perform_job(VeryHookyJobThatFails, history)
414
+ end
415
+ assert_equal history, [
416
+ :before_perform,
417
+ :start_around_perform,
418
+ :perform,
419
+ :finish_around_perform,
420
+ :after_perform,
421
+ "oh no"
422
+ ]
423
+ end
424
+
425
+ class ::CallbacksInline
426
+ @queue = :callbacks_inline
427
+
428
+ def self.before_perform_record_history(history, count)
429
+ history << :before_perform
430
+ count['count'] += 1
431
+ end
432
+
433
+ def self.after_perform_record_history(history, count)
434
+ history << :after_perform
435
+ count['count'] += 1
436
+ end
437
+
438
+ def self.around_perform_record_history(history, count)
439
+ history << :start_around_perform
440
+ count['count'] += 1
441
+ yield
442
+ history << :finish_around_perform
443
+ count['count'] += 1
444
+ end
445
+
446
+ def self.perform(history, count)
447
+ history << :perform
448
+ $history = history
449
+ $count = count
450
+ end
451
+ end
452
+
453
+ test "it runs callbacks when inline is true" do
454
+ begin
455
+ ResqueSqs.inline = true
456
+ # Sending down two parameters that can be passed and updated by reference
457
+ result = ResqueSqs.enqueue(CallbacksInline, [], {'count' => 0})
458
+ assert_equal true, result, "perform returned true"
459
+ assert_equal $history, [:before_perform, :start_around_perform, :perform, :finish_around_perform, :after_perform]
460
+ assert_equal 4, $count['count']
461
+ ensure
462
+ ResqueSqs.inline = false
463
+ end
464
+ end
465
+ end
@@ -0,0 +1,230 @@
1
+ require 'test_helper'
2
+
3
+ context "Multiple plugins with multiple hooks" do
4
+ include PerformJob
5
+
6
+ module Plugin1
7
+ def before_perform_record_history1(history)
8
+ history << :before1
9
+ end
10
+ def after_perform_record_history1(history)
11
+ history << :after1
12
+ end
13
+ end
14
+
15
+ module Plugin2
16
+ def before_perform_record_history2(history)
17
+ history << :before2
18
+ end
19
+ def after_perform_record_history2(history)
20
+ history << :after2
21
+ end
22
+ end
23
+
24
+ class ::ManyBeforesJob
25
+ extend Plugin1
26
+ extend Plugin2
27
+ def self.perform(history)
28
+ history << :perform
29
+ end
30
+ end
31
+
32
+ test "hooks of each type are executed in alphabetical order" do
33
+ result = perform_job(ManyBeforesJob, history=[])
34
+ assert_equal true, result, "perform returned true"
35
+ assert_equal [:before1, :before2, :perform, :after1, :after2], history
36
+ end
37
+ end
38
+
39
+ context "ResqueSqs::Plugin ordering before_perform" do
40
+ include PerformJob
41
+
42
+ module BeforePerformPlugin
43
+ def before_perform1(history)
44
+ history << :before_perform1
45
+ end
46
+ end
47
+
48
+ class ::JobPluginsTestBeforePerformJob
49
+ extend BeforePerformPlugin
50
+ def self.perform(history)
51
+ history << :perform
52
+ end
53
+ def self.before_perform(history)
54
+ history << :before_perform
55
+ end
56
+ end
57
+
58
+ test "before_perform hooks are executed in order" do
59
+ result = perform_job(JobPluginsTestBeforePerformJob, history=[])
60
+ assert_equal true, result, "perform returned true"
61
+ assert_equal [:before_perform, :before_perform1, :perform], history
62
+ end
63
+ end
64
+
65
+ context "ResqueSqs::Plugin ordering after_perform" do
66
+ include PerformJob
67
+
68
+ module AfterPerformPlugin
69
+ def after_perform_record_history(history)
70
+ history << :after_perform1
71
+ end
72
+ end
73
+
74
+ class ::JobPluginsTestAfterPerformJob
75
+ extend AfterPerformPlugin
76
+ def self.perform(history)
77
+ history << :perform
78
+ end
79
+ def self.after_perform(history)
80
+ history << :after_perform
81
+ end
82
+ end
83
+
84
+ test "after_perform hooks are executed in order" do
85
+ result = perform_job(JobPluginsTestAfterPerformJob, history=[])
86
+ assert_equal true, result, "perform returned true"
87
+ assert_equal [:perform, :after_perform, :after_perform1], history
88
+ end
89
+ end
90
+
91
+ context "ResqueSqs::Plugin ordering around_perform" do
92
+ include PerformJob
93
+
94
+ module AroundPerformPlugin1
95
+ def around_perform1(history)
96
+ history << :around_perform_plugin1
97
+ yield
98
+ end
99
+ end
100
+
101
+ class ::AroundPerformJustPerformsJob
102
+ extend AroundPerformPlugin1
103
+ def self.perform(history)
104
+ history << :perform
105
+ end
106
+ end
107
+
108
+ test "around_perform hooks are executed before the job" do
109
+ result = perform_job(AroundPerformJustPerformsJob, history=[])
110
+ assert_equal true, result, "perform returned true"
111
+ assert_equal [:around_perform_plugin1, :perform], history
112
+ end
113
+
114
+ class ::JobPluginsTestAroundPerformJob
115
+ extend AroundPerformPlugin1
116
+ def self.perform(history)
117
+ history << :perform
118
+ end
119
+ def self.around_perform(history)
120
+ history << :around_perform
121
+ yield
122
+ end
123
+ end
124
+
125
+ test "around_perform hooks are executed in order" do
126
+ result = perform_job(JobPluginsTestAroundPerformJob, history=[])
127
+ assert_equal true, result, "perform returned true"
128
+ assert_equal [:around_perform, :around_perform_plugin1, :perform], history
129
+ end
130
+
131
+ module AroundPerformPlugin2
132
+ def around_perform2(history)
133
+ history << :around_perform_plugin2
134
+ yield
135
+ end
136
+ end
137
+
138
+ class ::AroundPerformJob2
139
+ extend AroundPerformPlugin1
140
+ extend AroundPerformPlugin2
141
+ def self.perform(history)
142
+ history << :perform
143
+ end
144
+ def self.around_perform(history)
145
+ history << :around_perform
146
+ yield
147
+ end
148
+ end
149
+
150
+ test "many around_perform are executed in order" do
151
+ result = perform_job(AroundPerformJob2, history=[])
152
+ assert_equal true, result, "perform returned true"
153
+ assert_equal [:around_perform, :around_perform_plugin1, :around_perform_plugin2, :perform], history
154
+ end
155
+
156
+ module AroundPerformDoesNotYield
157
+ def around_perform0(history)
158
+ history << :around_perform0
159
+ end
160
+ end
161
+
162
+ class ::AroundPerformJob3
163
+ extend AroundPerformPlugin1
164
+ extend AroundPerformPlugin2
165
+ extend AroundPerformDoesNotYield
166
+ def self.perform(history)
167
+ history << :perform
168
+ end
169
+ def self.around_perform(history)
170
+ history << :around_perform
171
+ yield
172
+ end
173
+ end
174
+
175
+ test "the job is aborted if an around_perform hook does not yield" do
176
+ result = perform_job(AroundPerformJob3, history=[])
177
+ assert_equal false, result, "perform returned false"
178
+ assert_equal [:around_perform, :around_perform0], history
179
+ end
180
+
181
+ module AroundPerformGetsJobResult
182
+ @@result = nil
183
+ def last_job_result
184
+ @@result
185
+ end
186
+
187
+ def around_perform_gets_job_result(*args)
188
+ @@result = yield
189
+ end
190
+ end
191
+
192
+ class ::AroundPerformJobWithReturnValue < GoodJob
193
+ extend AroundPerformGetsJobResult
194
+ end
195
+
196
+ test "the job is aborted if an around_perform hook does not yield" do
197
+ result = perform_job(AroundPerformJobWithReturnValue, 'Bob')
198
+ assert_equal true, result, "perform returned true"
199
+ assert_equal 'Good job, Bob', AroundPerformJobWithReturnValue.last_job_result
200
+ end
201
+ end
202
+
203
+ context "ResqueSqs::Plugin ordering on_failure" do
204
+ include PerformJob
205
+
206
+ module OnFailurePlugin
207
+ def on_failure1(exception, history)
208
+ history << "#{exception.message} plugin"
209
+ end
210
+ end
211
+
212
+ class ::FailureJob
213
+ extend OnFailurePlugin
214
+ def self.perform(history)
215
+ history << :perform
216
+ raise StandardError, "oh no"
217
+ end
218
+ def self.on_failure(exception, history)
219
+ history << exception.message
220
+ end
221
+ end
222
+
223
+ test "on_failure hooks are executed in order" do
224
+ history = []
225
+ assert_raises StandardError do
226
+ perform_job(FailureJob, history)
227
+ end
228
+ assert_equal [:perform, "oh no", "oh no plugin"], history
229
+ end
230
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+ require 'minitest/mock'
3
+
4
+ context "ResqueSqs::Logging" do
5
+ teardown { reset_logger }
6
+
7
+ test "sets and receives the active logger" do
8
+ my_logger = Object.new
9
+ ResqueSqs.logger = my_logger
10
+ assert_equal my_logger, ResqueSqs.logger
11
+ end
12
+
13
+ %w(debug info error fatal).each do |severity|
14
+ test "logs #{severity} messages" do
15
+ message = "test message"
16
+ mock_logger = MiniTest::Mock.new
17
+ mock_logger.expect severity.to_sym, nil, [message]
18
+ ResqueSqs.logger = mock_logger
19
+
20
+ ResqueSqs::Logging.send severity, message
21
+ mock_logger.verify
22
+ end
23
+ end
24
+ end