sidekiq 3.5.0 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

data/test/test_logging.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require_relative 'helper'
2
2
  require 'sidekiq/logging'
3
3
 
4
- class TestFetcher < Sidekiq::Test
4
+ class TestLogging < Sidekiq::Test
5
5
  describe Sidekiq::Logging do
6
6
  describe "#with_context" do
7
7
  def context
data/test/test_manager.rb CHANGED
@@ -5,7 +5,6 @@ class TestManager < Sidekiq::Test
5
5
 
6
6
  describe 'manager' do
7
7
  before do
8
- Sidekiq.redis = REDIS
9
8
  Sidekiq.redis {|c| c.flushdb }
10
9
  end
11
10
 
@@ -10,8 +10,6 @@ class TestProcessor < Sidekiq::Test
10
10
  $invokes = 0
11
11
  @boss = Minitest::Mock.new
12
12
  @processor = ::Sidekiq::Processor.new(@boss)
13
- Celluloid.logger = nil
14
- Sidekiq.redis = REDIS
15
13
  end
16
14
 
17
15
  class MockWorker
@@ -88,23 +86,112 @@ class TestProcessor < Sidekiq::Test
88
86
  assert_equal [['myarg']], msg['args']
89
87
  end
90
88
 
91
- describe 'stats' do
89
+ describe 'acknowledgement' do
90
+ class ExceptionRaisingMiddleware
91
+ def initialize(raise_before_yield, raise_after_yield, skip)
92
+ @raise_before_yield = raise_before_yield
93
+ @raise_after_yield = raise_after_yield
94
+ @skip = skip
95
+ end
96
+
97
+ def call(worker, item, queue)
98
+ raise TEST_EXCEPTION if @raise_before_yield
99
+ yield unless @skip
100
+ raise TEST_EXCEPTION if @raise_after_yield
101
+ end
102
+ end
103
+
104
+ let(:raise_before_yield) { false }
105
+ let(:raise_after_yield) { false }
106
+ let(:skip_job) { false }
107
+ let(:worker_args) { ['myarg'] }
108
+ let(:work) { MiniTest::Mock.new }
109
+ let(:actor) { Minitest::Mock.new }
110
+
92
111
  before do
93
- Sidekiq.redis {|c| c.flushdb }
112
+ work.expect(:queue_name, 'queues:default')
113
+ work.expect(:message, Sidekiq.dump_json({ 'class' => MockWorker.to_s, 'args' => worker_args }))
114
+ Sidekiq.server_middleware do |chain|
115
+ chain.prepend ExceptionRaisingMiddleware, raise_before_yield, raise_after_yield, skip_job
116
+ end
117
+
118
+ actor.expect(:real_thread, nil, [nil, Thread])
119
+ @boss.expect(:async, actor, [])
120
+ end
121
+
122
+ after do
123
+ Sidekiq.server_middleware do |chain|
124
+ chain.remove ExceptionRaisingMiddleware
125
+ end
126
+ work.verify
127
+ end
128
+
129
+ describe 'middleware throws an exception before processing the work' do
130
+ let(:raise_before_yield) { true }
131
+
132
+ it 'does not ack' do
133
+ begin
134
+ @processor.process(work)
135
+ flunk "Expected #process to raise exception"
136
+ rescue TestException
137
+ end
138
+ end
139
+ end
140
+
141
+ describe 'middleware throws an exception after processing the work' do
142
+ let(:raise_after_yield) { true }
143
+
144
+ it 'acks the job' do
145
+ work.expect(:acknowledge, nil)
146
+ begin
147
+ @processor.process(work)
148
+ flunk "Expected #process to raise exception"
149
+ rescue TestException
150
+ end
151
+ end
152
+ end
153
+
154
+ describe 'middleware decides to skip work' do
155
+ let(:skip_job) { true }
156
+
157
+ it 'acks the job' do
158
+ work.expect(:acknowledge, nil)
159
+ @boss.expect(:async, actor, [])
160
+ actor.expect(:processor_done, nil, [@processor])
161
+ @processor.process(work)
162
+ end
94
163
  end
95
164
 
96
- def with_expire(time)
97
- begin
98
- old = Sidekiq::Processor::STATS_TIMEOUT
99
- silence_warnings { Sidekiq::Processor.const_set(:STATS_TIMEOUT, time) }
100
- yield
101
- ensure
102
- silence_warnings { Sidekiq::Processor.const_set(:STATS_TIMEOUT, old) }
165
+ describe 'worker raises an exception' do
166
+ let(:worker_args) { ['boom'] }
167
+
168
+ it 'acks the job' do
169
+ work.expect(:acknowledge, nil)
170
+ begin
171
+ @processor.process(work)
172
+ flunk "Expected #process to raise exception"
173
+ rescue TestException
174
+ end
103
175
  end
104
176
  end
105
177
 
178
+ describe 'everything goes well' do
179
+ it 'acks the job' do
180
+ work.expect(:acknowledge, nil)
181
+ @boss.expect(:async, actor, [])
182
+ actor.expect(:processor_done, nil, [@processor])
183
+ @processor.process(work)
184
+ end
185
+ end
186
+ end
187
+
188
+ describe 'stats' do
189
+ before do
190
+ Sidekiq.redis {|c| c.flushdb }
191
+ end
192
+
106
193
  describe 'when successful' do
107
- let(:processed_today_key) { "stat:processed:#{Time.now.utc.to_date}" }
194
+ let(:processed_today_key) { "stat:processed:#{Time.now.utc.strftime("%Y-%m-%d")}" }
108
195
 
109
196
  def successful_job
110
197
  msg = Sidekiq.dump_json({ 'class' => MockWorker.to_s, 'args' => ['myarg'] })
@@ -117,23 +204,15 @@ class TestProcessor < Sidekiq::Test
117
204
  end
118
205
 
119
206
  it 'increments processed stat' do
207
+ assert_equal 0, Sidekiq::Stats.new.processed
120
208
  successful_job
121
209
  assert_equal 1, Sidekiq::Stats.new.processed
122
- end
123
-
124
- it 'expires processed stat' do
125
- successful_job
126
210
  assert_equal Sidekiq::Processor::STATS_TIMEOUT, Sidekiq.redis { |conn| conn.ttl(processed_today_key) }
127
211
  end
128
-
129
- it 'increments date processed stat' do
130
- successful_job
131
- assert_equal 1, Sidekiq.redis { |conn| conn.get(processed_today_key) }.to_i
132
- end
133
212
  end
134
213
 
135
214
  describe 'when failed' do
136
- let(:failed_today_key) { "stat:failed:#{Time.now.utc.to_date}" }
215
+ let(:failed_today_key) { "stat:failed:#{Time.now.utc.strftime("%Y-%m-%d")}" }
137
216
 
138
217
  def failed_job
139
218
  actor = Minitest::Mock.new
@@ -147,17 +226,9 @@ class TestProcessor < Sidekiq::Test
147
226
  end
148
227
 
149
228
  it 'increments failed stat' do
229
+ assert_equal 0, Sidekiq::Stats.new.failed
150
230
  failed_job
151
231
  assert_equal 1, Sidekiq::Stats.new.failed
152
- end
153
-
154
- it 'increments date failed stat' do
155
- failed_job
156
- assert_equal 1, Sidekiq.redis { |conn| conn.get(failed_today_key) }.to_i
157
- end
158
-
159
- it 'expires failed stat' do
160
- failed_job
161
232
  assert_equal Sidekiq::Processor::STATS_TIMEOUT, Sidekiq.redis { |conn| conn.ttl(failed_today_key) }
162
233
  end
163
234
  end
data/test/test_rails.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  require_relative 'helper'
2
- require 'sidekiq'
3
- require 'sidekiq/web_helpers'
4
2
 
5
3
  $HAS_AJ = true
6
4
  begin
@@ -1,5 +1,4 @@
1
1
  require_relative 'helper'
2
- require 'sidekiq/redis_connection'
3
2
 
4
3
  class TestRedisConnection < Sidekiq::Test
5
4
 
data/test/test_retry.rb CHANGED
@@ -5,175 +5,136 @@ require 'sidekiq/middleware/server/retry_jobs'
5
5
 
6
6
  class TestRetry < Sidekiq::Test
7
7
  describe 'middleware' do
8
+ class SomeWorker
9
+ include Sidekiq::Worker
10
+ end
11
+
8
12
  before do
9
- @redis = Minitest::Mock.new
10
- # Ugh, this is terrible.
11
- Sidekiq.instance_variable_set(:@redis, @redis)
13
+ Sidekiq.redis {|c| c.flushdb }
14
+ end
12
15
 
13
- def @redis.with; yield self; end
14
- def @redis.multi; yield self; end
16
+ def worker
17
+ @worker ||= SomeWorker.new
15
18
  end
16
19
 
17
- after do
18
- Sidekiq.redis = REDIS
20
+ def handler(options={})
21
+ @handler ||= Sidekiq::Middleware::Server::RetryJobs.new(options)
19
22
  end
20
23
 
21
- let(:worker) do
22
- Class.new do
23
- include ::Sidekiq::Worker
24
- end
24
+ def job(options={})
25
+ @job ||= { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }.merge(options)
25
26
  end
26
27
 
27
28
  it 'allows disabling retry' do
28
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => false }
29
- msg2 = msg.dup
30
- handler = Sidekiq::Middleware::Server::RetryJobs.new
31
29
  assert_raises RuntimeError do
32
- handler.call(worker, msg2, 'default') do
30
+ handler.call(worker, job('retry' => false), 'default') do
33
31
  raise "kerblammo!"
34
32
  end
35
33
  end
36
- assert_equal msg, msg2
34
+ assert_equal 0, Sidekiq::RetrySet.new.size
37
35
  end
38
36
 
39
37
  it 'allows a numeric retry' do
40
- @redis.expect :zadd, 1, ['retry', String, String]
41
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => 2 }
42
- handler = Sidekiq::Middleware::Server::RetryJobs.new
43
38
  assert_raises RuntimeError do
44
- handler.call(worker, msg, 'default') do
39
+ handler.call(worker, job('retry' => 2), 'default') do
45
40
  raise "kerblammo!"
46
41
  end
47
42
  end
48
- msg.delete('failed_at')
49
- assert_equal({"class"=>"Bob", "args"=>[1, 2, "foo"], "retry"=>2, "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "retry_count"=>0}, msg)
50
- @redis.verify
43
+ assert_equal 1, Sidekiq::RetrySet.new.size
44
+ assert_equal 0, Sidekiq::DeadSet.new.size
51
45
  end
52
46
 
53
47
  it 'allows 0 retry => no retry and dead queue' do
54
- @redis.expect :zadd, 1, ['dead', Float, String]
55
- @redis.expect :zremrangebyscore, 0, ['dead', String, Float]
56
- @redis.expect :zremrangebyrank, 0, ['dead', Numeric, Numeric]
57
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => 0 }
58
- msg2 = msg.dup
59
- handler = Sidekiq::Middleware::Server::RetryJobs.new
60
48
  assert_raises RuntimeError do
61
- handler.call(worker, msg, 'default') do
49
+ handler.call(worker, job('retry' => 0), 'default') do
62
50
  raise "kerblammo!"
63
51
  end
64
52
  end
65
- msg.delete('failed_at')
66
- expected = msg2.merge "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "retry_count"=>0
67
- assert_equal expected, msg
68
- @redis.verify # not called
53
+ assert_equal 0, Sidekiq::RetrySet.new.size
54
+ assert_equal 1, Sidekiq::DeadSet.new.size
69
55
  end
70
56
 
71
57
  it 'handles zany characters in error message, #1705' do
72
58
  skip 'skipped! test requires ruby 2.1+' if RUBY_VERSION <= '2.1.0'
73
- @redis.expect :zadd, 1, ['retry', String, String]
74
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => 2 }
75
- msg2 = msg.dup
76
- handler = Sidekiq::Middleware::Server::RetryJobs.new
59
+
77
60
  assert_raises RuntimeError do
78
- handler.call(worker, msg2, 'default') do
61
+ handler.call(worker, job, 'default') do
79
62
  raise "kerblammo! #{195.chr}"
80
63
  end
81
64
  end
82
- msg2.delete('failed_at')
83
- assert_equal({"class"=>"Bob", "args"=>[1, 2, "foo"], "retry"=>2, "queue"=>"default", "error_message"=>"kerblammo! �", "error_class"=>"RuntimeError", "retry_count"=>0}, msg2)
84
- @redis.verify
65
+ assert_equal "kerblammo! �", job["error_message"]
85
66
  end
86
67
 
87
68
 
88
69
  it 'allows a max_retries option in initializer' do
89
70
  max_retries = 7
90
- 1.upto(max_retries) do
91
- @redis.expect :zadd, 1, ['retry', String, String]
92
- end
93
- @redis.expect :zadd, 1, ['dead', Float, String]
94
- @redis.expect :zremrangebyscore, 0, ['dead', String, Float]
95
- @redis.expect :zremrangebyrank, 0, ['dead', Numeric, Numeric]
96
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }
97
- handler = Sidekiq::Middleware::Server::RetryJobs.new({:max_retries => max_retries})
98
71
  1.upto(max_retries + 1) do
99
72
  assert_raises RuntimeError do
100
- handler.call(worker, msg, 'default') do
73
+ handler(:max_retries => max_retries).call(worker, job, 'default') do
101
74
  raise "kerblammo!"
102
75
  end
103
76
  end
104
77
  end
105
- @redis.verify
78
+
79
+ assert_equal max_retries, Sidekiq::RetrySet.new.size
80
+ assert_equal 1, Sidekiq::DeadSet.new.size
106
81
  end
107
82
 
108
83
  it 'saves backtraces' do
109
- @redis.expect :zadd, 1, ['retry', String, String]
110
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true, 'backtrace' => true }
111
- handler = Sidekiq::Middleware::Server::RetryJobs.new
112
84
  c = nil
113
85
  assert_raises RuntimeError do
114
- handler.call(worker, msg, 'default') do
86
+ handler.call(worker, job('backtrace' => true), 'default') do
115
87
  c = caller(0); raise "kerblammo!"
116
88
  end
117
89
  end
118
- assert msg["error_backtrace"]
119
- assert_equal c[0], msg["error_backtrace"][0]
120
- @redis.verify
90
+ assert job["error_backtrace"]
91
+ assert_equal c[0], job["error_backtrace"][0]
121
92
  end
122
93
 
123
94
  it 'saves partial backtraces' do
124
- @redis.expect :zadd, 1, ['retry', String, String]
125
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true, 'backtrace' => 3 }
126
- handler = Sidekiq::Middleware::Server::RetryJobs.new
127
95
  c = nil
128
96
  assert_raises RuntimeError do
129
- handler.call(worker, msg, 'default') do
97
+ handler.call(worker, job('backtrace' => 3), 'default') do
130
98
  c = caller(0)[0...3]; raise "kerblammo!"
131
99
  end
132
100
  end
133
- assert msg["error_backtrace"]
134
- assert_equal c, msg["error_backtrace"]
101
+ assert job["error_backtrace"]
102
+ assert_equal c, job["error_backtrace"]
135
103
  assert_equal 3, c.size
136
- assert_equal 3, msg["error_backtrace"].size
137
104
  end
138
105
 
139
106
  it 'handles a new failed message' do
140
- @redis.expect :zadd, 1, ['retry', String, String]
141
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }
142
- handler = Sidekiq::Middleware::Server::RetryJobs.new
143
107
  assert_raises RuntimeError do
144
- handler.call(worker, msg, 'default') do
108
+ handler.call(worker, job, 'default') do
145
109
  raise "kerblammo!"
146
110
  end
147
111
  end
148
- assert_equal 'default', msg["queue"]
149
- assert_equal 'kerblammo!', msg["error_message"]
150
- assert_equal 'RuntimeError', msg["error_class"]
151
- assert_equal 0, msg["retry_count"]
152
- refute msg["error_backtrace"]
153
- assert msg["failed_at"]
154
- @redis.verify
112
+ assert_equal 'default', job["queue"]
113
+ assert_equal 'kerblammo!', job["error_message"]
114
+ assert_equal 'RuntimeError', job["error_class"]
115
+ assert_equal 0, job["retry_count"]
116
+ refute job["error_backtrace"]
117
+ assert job["failed_at"]
155
118
  end
156
119
 
157
120
  it 'shuts down without retrying work-in-progress, which will resume' do
158
- @redis.expect :zadd, 1, ['retry', String, String]
121
+ rs = Sidekiq::RetrySet.new
122
+ assert_equal 0, rs.size
159
123
  msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }
160
- handler = Sidekiq::Middleware::Server::RetryJobs.new
161
124
  assert_raises Sidekiq::Shutdown do
162
125
  handler.call(worker, msg, 'default') do
163
126
  raise Sidekiq::Shutdown
164
127
  end
165
128
  end
166
- assert_raises(MockExpectationError, "zadd should not be called") do
167
- @redis.verify
168
- end
129
+ assert_equal 0, rs.size
169
130
  end
170
131
 
171
132
  it 'shuts down cleanly when shutdown causes exception' do
172
133
  skip('Not supported in Ruby < 2.1.0') if RUBY_VERSION < '2.1.0'
173
134
 
174
- @redis.expect :zadd, 1, ['retry', String, String]
135
+ rs = Sidekiq::RetrySet.new
136
+ assert_equal 0, rs.size
175
137
  msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }
176
- handler = Sidekiq::Middleware::Server::RetryJobs.new
177
138
  assert_raises Sidekiq::Shutdown do
178
139
  handler.call(worker, msg, 'default') do
179
140
  begin
@@ -183,19 +144,16 @@ class TestRetry < Sidekiq::Test
183
144
  end
184
145
  end
185
146
  end
186
- assert_raises(MockExpectationError, "zadd should not be called") do
187
- @redis.verify
188
- end
147
+ assert_equal 0, rs.size
189
148
  end
190
149
 
191
150
  it 'shuts down cleanly when shutdown causes chained exceptions' do
192
151
  skip('Not supported in Ruby < 2.1.0') if RUBY_VERSION < '2.1.0'
193
152
 
194
- @redis.expect :zadd, 1, ['retry', String, String]
195
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true }
196
- handler = Sidekiq::Middleware::Server::RetryJobs.new
153
+ rs = Sidekiq::RetrySet.new
154
+ assert_equal 0, rs.size
197
155
  assert_raises Sidekiq::Shutdown do
198
- handler.call(worker, msg, 'default') do
156
+ handler.call(worker, job, 'default') do
199
157
  begin
200
158
  raise Sidekiq::Shutdown
201
159
  rescue Interrupt
@@ -207,93 +165,55 @@ class TestRetry < Sidekiq::Test
207
165
  end
208
166
  end
209
167
  end
210
- assert_raises(MockExpectationError, "zadd should not be called") do
211
- @redis.verify
212
- end
168
+ assert_equal 0, rs.size
213
169
  end
214
170
 
215
171
  it 'allows a retry queue' do
216
- @redis.expect :zadd, 1, ['retry', String, String]
217
- msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true, 'retry_queue' => 'retry' }
218
- handler = Sidekiq::Middleware::Server::RetryJobs.new
219
172
  assert_raises RuntimeError do
220
- handler.call(worker, msg, 'default') do
173
+ handler.call(worker, job("retry_queue" => 'retryx'), 'default') do
221
174
  raise "kerblammo!"
222
175
  end
223
176
  end
224
- assert_equal 'retry', msg["queue"]
225
- assert_equal 'kerblammo!', msg["error_message"]
226
- assert_equal 'RuntimeError', msg["error_class"]
227
- assert_equal 0, msg["retry_count"]
228
- refute msg["error_backtrace"]
229
- assert msg["failed_at"]
230
- @redis.verify
177
+ assert_equal 'retryx', job["queue"]
178
+ assert_equal 'kerblammo!', job["error_message"]
179
+ assert_equal 'RuntimeError', job["error_class"]
180
+ assert_equal 0, job["retry_count"]
181
+ refute job["error_backtrace"]
182
+ assert job["failed_at"]
231
183
  end
232
184
 
233
185
  it 'handles a recurring failed message' do
234
- @redis.expect :zadd, 1, ['retry', String, String]
235
186
  now = Time.now.to_f
236
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], 'retry' => true, "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>10}
237
- handler = Sidekiq::Middleware::Server::RetryJobs.new
187
+ msg = {"queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>10}
238
188
  assert_raises RuntimeError do
239
- handler.call(worker, msg, 'default') do
189
+ handler.call(worker, job(msg), 'default') do
240
190
  raise "kerblammo!"
241
191
  end
242
192
  end
243
- assert_equal 'default', msg["queue"]
244
- assert_equal 'kerblammo!', msg["error_message"]
245
- assert_equal 'RuntimeError', msg["error_class"]
246
- assert_equal 11, msg["retry_count"]
247
- assert msg["failed_at"]
248
- @redis.verify
249
- end
250
-
251
- it 'handles a recurring failed message before reaching user-specifed max' do
252
- @redis.expect :zadd, 1, ['retry', String, String]
253
- now = Time.now.to_f
254
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], 'retry' => 10, "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>8}
255
- handler = Sidekiq::Middleware::Server::RetryJobs.new
256
- assert_raises RuntimeError do
257
- handler.call(worker, msg, 'default') do
258
- raise "kerblammo!"
259
- end
260
- end
261
- assert_equal 'default', msg["queue"]
262
- assert_equal 'kerblammo!', msg["error_message"]
263
- assert_equal 'RuntimeError', msg["error_class"]
264
- assert_equal 9, msg["retry_count"]
265
- assert msg["failed_at"]
266
- @redis.verify
193
+ assert_equal 'default', job["queue"]
194
+ assert_equal 'kerblammo!', job["error_message"]
195
+ assert_equal 'RuntimeError', job["error_class"]
196
+ assert_equal 11, job["retry_count"]
197
+ assert job["failed_at"]
267
198
  end
268
199
 
269
200
  it 'throws away old messages after too many retries (using the default)' do
201
+ q = Sidekiq::Queue.new
202
+ rs = Sidekiq::RetrySet.new
203
+ ds = Sidekiq::DeadSet.new
204
+ assert_equal 0, q.size
205
+ assert_equal 0, rs.size
206
+ assert_equal 0, ds.size
270
207
  now = Time.now.to_f
271
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry"=>true, "retry_count"=>25}
272
- @redis.expect :zadd, 1, ['dead', Float, String]
273
- @redis.expect :zremrangebyscore, 0, ['dead', String, Float]
274
- @redis.expect :zremrangebyrank, 0, ['dead', Numeric, Numeric]
275
- handler = Sidekiq::Middleware::Server::RetryJobs.new
276
- assert_raises RuntimeError do
277
- handler.call(worker, msg, 'default') do
278
- raise "kerblammo!"
279
- end
280
- end
281
- @redis.verify
282
- end
283
-
284
- it 'throws away old messages after too many retries (using user-specified max)' do
285
- now = Time.now.to_f
286
- msg = {"class"=>"Bob", "args"=>[1, 2, "foo"], "queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry"=>3, "retry_count"=>3}
287
- @redis.expect :zadd, 1, ['dead', Float, String]
288
- @redis.expect :zremrangebyscore, 0, ['dead', String, Float]
289
- @redis.expect :zremrangebyrank, 0, ['dead', Numeric, Numeric]
290
- handler = Sidekiq::Middleware::Server::RetryJobs.new
208
+ msg = {"queue"=>"default", "error_message"=>"kerblammo!", "error_class"=>"RuntimeError", "failed_at"=>now, "retry_count"=>25}
291
209
  assert_raises RuntimeError do
292
- handler.call(worker, msg, 'default') do
210
+ handler.call(worker, job(msg), 'default') do
293
211
  raise "kerblammo!"
294
212
  end
295
213
  end
296
- @redis.verify
214
+ assert_equal 0, q.size
215
+ assert_equal 0, rs.size
216
+ assert_equal 1, ds.size
297
217
  end
298
218
 
299
219
  describe "custom retry delay" do
@@ -309,38 +229,32 @@ class TestRetry < Sidekiq::Test
309
229
  File.unlink @tmp_log_path if File.exist?(@tmp_log_path)
310
230
  end
311
231
 
312
- let(:custom_worker) do
313
- Class.new do
314
- include ::Sidekiq::Worker
232
+ class CustomWorker
233
+ include Sidekiq::Worker
315
234
 
316
- sidekiq_retry_in do |count|
317
- count * 2
318
- end
235
+ sidekiq_retry_in do |count|
236
+ count * 2
319
237
  end
320
238
  end
321
239
 
322
- let(:error_worker) do
323
- Class.new do
324
- include ::Sidekiq::Worker
240
+ class ErrorWorker
241
+ include Sidekiq::Worker
325
242
 
326
- sidekiq_retry_in do |count|
327
- count / 0
328
- end
243
+ sidekiq_retry_in do |count|
244
+ count / 0
329
245
  end
330
246
  end
331
247
 
332
- let(:handler) { Sidekiq::Middleware::Server::RetryJobs.new }
333
-
334
248
  it "retries with a default delay" do
335
249
  refute_equal 4, handler.__send__(:delay_for, worker, 2)
336
250
  end
337
251
 
338
252
  it "retries with a custom delay" do
339
- assert_equal 4, handler.__send__(:delay_for, custom_worker, 2)
253
+ assert_equal 4, handler.__send__(:delay_for, CustomWorker, 2)
340
254
  end
341
255
 
342
256
  it "falls back to the default retry on exception" do
343
- refute_equal 4, handler.__send__(:delay_for, error_worker, 2)
257
+ refute_equal 4, handler.__send__(:delay_for, ErrorWorker, 2)
344
258
  assert_match(/Failure scheduling retry using the defined `sidekiq_retry_in`/,
345
259
  File.read(@tmp_log_path), 'Log entry missing for sidekiq_retry_in')
346
260
  end