sidekiq-failures 0.4.5 → 1.1.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.
@@ -1,49 +1,130 @@
1
1
  module Sidekiq
2
2
  module Failures
3
3
  module WebExtension
4
+ LEGACY_SIDEKIQ_VERSION = Gem::Version.new("7.3.9")
5
+
6
+ # Helper method to check Sidekiq version
7
+ def self.legacy_sidekiq?
8
+ Gem::Version.new(Sidekiq::VERSION) <= LEGACY_SIDEKIQ_VERSION
9
+ end
10
+
11
+ # Helper method to get parameters based on path and parameter name
12
+ def self.fetch_param_value(path, param_name)
13
+ if legacy_sidekiq?
14
+ # For newer Sidekiq, use route_params or url_params based on path
15
+ lambda { |env| env.params[param_name] }
16
+ else
17
+ # For legacy Sidekiq, just use params
18
+ if path.include?(":#{param_name}")
19
+ lambda { |env| env.route_params(param_name.to_sym) }
20
+ else
21
+ lambda { |env| env.url_params(param_name.to_s) }
22
+ end
23
+ end
24
+ end
25
+
26
+ # Helper method to handle parse_params vs parse_key compatibility
27
+ def self.parse_key_or_params
28
+ lambda do |env, key|
29
+ if env.respond_to?(:parse_key)
30
+ env.parse_key(key)
31
+ else
32
+ env.parse_params(key)
33
+ end
34
+ end
35
+ end
36
+
37
+ # Define the helper method implementation that will be used in both versions
38
+ # Instead of a static lambda, we'll return a method that needs to be evaluated in context
39
+ def self.safe_relative_time_implementation
40
+ lambda do |time, context|
41
+ return unless time
42
+
43
+ time = if time.is_a?(Numeric)
44
+ Time.at(time)
45
+ else
46
+ Time.parse(time)
47
+ end
48
+
49
+ # Use the context to call relative_time
50
+ context.relative_time(time)
51
+ end
52
+ end
53
+
54
+ # Define the helpers module for Sidekiq 8.0+
55
+ module FailuresHelpers
56
+ def safe_relative_time(time)
57
+ # Pass self (the context with relative_time) to the implementation
58
+ WebExtension.safe_relative_time_implementation.call(time, self)
59
+ end
60
+ end
4
61
 
5
62
  def self.registered(app)
6
63
  view_path = File.join(File.expand_path("..", __FILE__), "views")
64
+ if legacy_sidekiq?
65
+ failures_view_path = File.join(view_path, "failures_legacy.erb")
66
+ failure_view_path = File.join(view_path, "failure_legacy.erb")
67
+ else
68
+ failures_view_path = File.join(view_path, "failures.erb")
69
+ failure_view_path = File.join(view_path, "failure.erb")
70
+ end
7
71
 
8
- app.helpers do
9
- def safe_relative_time(time)
10
- time = if time.is_a?(Numeric)
11
- Time.at(time)
12
- else
13
- Time.parse(time)
14
- end
72
+ # Create a parse helper for use in routes
73
+ parse_helper = parse_key_or_params
15
74
 
16
- relative_time(time)
75
+ # Use appropriate helpers implementation based on Sidekiq version
76
+ if legacy_sidekiq?
77
+ # Original implementation for older Sidekiq versions
78
+ app.helpers do
79
+ define_method(:safe_relative_time) do |time|
80
+ # Pass self (the context with relative_time) to the implementation
81
+ WebExtension.safe_relative_time_implementation.call(time, self)
82
+ end
17
83
  end
84
+ else
85
+ # New implementation for Sidekiq 8.0+
86
+ app.helpers(FailuresHelpers)
18
87
  end
19
88
 
20
89
  app.get "/failures" do
21
- @count = (params[:count] || 25).to_i
22
- (@current_page, @total_size, @failures) = page(LIST_KEY, params[:page], @count)
90
+ page_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures", "page").call(self)
91
+ count_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures", "count").call(self)
92
+ @count = (count_param || 25).to_i
93
+
94
+ (@current_page, @total_size, @failures) = page(LIST_KEY, page_param, @count, :reverse => true)
23
95
  @failures = @failures.map {|msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
24
96
 
25
- render(:erb, File.read(File.join(view_path, "failures.erb")))
97
+ render(:erb, File.read(failures_view_path))
26
98
  end
27
99
 
28
100
  app.get "/failures/:key" do
29
- halt 404 unless params['key']
30
-
31
- @failure = FailureSet.new.fetch(*parse_params(params['key'])).first
32
- redirect "#{root_path}failures" if @failure.nil?
33
- render(:erb, File.read(File.join(view_path, "failure.erb")))
101
+ key_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures/:key", "key").call(self)
102
+ halt 404 unless key_param
103
+
104
+ @failure = FailureSet.new.fetch(*parse_helper.call(self, key_param)).first
105
+ if @failure.nil?
106
+ redirect "#{root_path}failures"
107
+ else
108
+ render(:erb, File.read(failure_view_path))
109
+ end
34
110
  end
35
111
 
36
112
  app.post "/failures" do
37
- halt 404 unless params['key']
113
+ key_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures", "key").call(self)
114
+ halt 404 unless key_param
38
115
 
39
- params['key'].each do |key|
40
- job = FailureSet.new.fetch(*parse_params(key)).first
116
+ key_param.each do |key|
117
+ job = FailureSet.new.fetch(*parse_helper.call(self, key)).first
41
118
  next unless job
42
119
 
43
- if params['retry']
120
+ retry_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures", "retry").call(self)
121
+ if retry_param
44
122
  job.retry_failure
45
- elsif params['delete']
46
- job.delete
123
+ else
124
+ delete_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures", "delete").call(self)
125
+ if delete_param
126
+ job.delete
127
+ end
47
128
  end
48
129
  end
49
130
 
@@ -51,21 +132,26 @@ module Sidekiq
51
132
  end
52
133
 
53
134
  app.post "/failures/:key" do
54
- halt 404 unless params['key']
135
+ key_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures/:key", "key").call(self)
136
+ halt 404 unless key_param
55
137
 
56
- job = FailureSet.new.fetch(*parse_params(params['key'])).first
138
+ job = FailureSet.new.fetch(*parse_helper.call(self, key_param)).first
57
139
  if job
58
- if params['retry']
140
+ retry_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures/:key", "retry").call(self)
141
+ if retry_param
59
142
  job.retry_failure
60
- elsif params['delete']
61
- job.delete
143
+ else
144
+ delete_param = Sidekiq::Failures::WebExtension.fetch_param_value("/failures/:key", "delete").call(self)
145
+ if delete_param
146
+ job.delete
147
+ end
62
148
  end
63
149
  end
64
150
  redirect_with_query("#{root_path}failures")
65
151
  end
66
152
 
67
153
  app.post "/failures/all/reset" do
68
- Sidekiq::Failures.reset_failures
154
+ Sidekiq::Failures.reset_failure_count
69
155
  redirect "#{root_path}failures"
70
156
  end
71
157
 
@@ -78,6 +164,18 @@ module Sidekiq
78
164
  FailureSet.new.retry_all_failures
79
165
  redirect "#{root_path}failures"
80
166
  end
167
+
168
+ app.get '/filter/failures' do
169
+ redirect "#{root_path}failures"
170
+ end
171
+
172
+ app.post '/filter/failures' do
173
+ substr_param = Sidekiq::Failures::WebExtension.fetch_param_value("/filter/failures", "substr").call(self)
174
+ @failures = Sidekiq::Failures::FailureSet.new.scan("*#{substr_param}*")
175
+ @current_page = 1
176
+ @count = @total_size = @failures.count
177
+ render(:erb, File.read(failures_view_path))
178
+ end
81
179
  end
82
180
  end
83
181
  end
@@ -5,6 +5,7 @@ rescue LoadError
5
5
  end
6
6
 
7
7
  require "sidekiq/api"
8
+ require "sidekiq/version"
8
9
  require "sidekiq/failures/version"
9
10
  require "sidekiq/failures/sorted_entry"
10
11
  require "sidekiq/failures/failure_set"
@@ -47,33 +48,63 @@ module Sidekiq
47
48
 
48
49
  # Fetches the failures max count value
49
50
  def self.failures_max_count
50
- return 1000 if @failures_max_count.nil?
51
-
52
- @failures_max_count
51
+ if !instance_variable_defined?(:@failures_max_count) || @failures_max_count.nil?
52
+ 1000
53
+ else
54
+ @failures_max_count
55
+ end
53
56
  end
54
57
 
55
58
  module Failures
56
59
  LIST_KEY = :failed
57
60
 
58
61
  def self.reset_failures
62
+ warn "NOTE: Sidekiq::Failures.reset_failures is deprecated; use Sidekiq::Failures.reset_failure_count instead."
63
+
64
+ reset_failure_count
65
+ end
66
+
67
+ def self.reset_failure_count
59
68
  Sidekiq.redis { |c| c.set("stat:failed", 0) }
60
69
  end
61
70
 
71
+ def self.clear_failures
72
+ FailureSet.new.clear
73
+ end
74
+
62
75
  def self.count
63
76
  Sidekiq.redis {|r| r.zcard(LIST_KEY) }
64
77
  end
78
+
79
+ def self.retry_middleware_class
80
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('5.0.0')
81
+ require 'sidekiq/job_retry'
82
+ Sidekiq::JobRetry
83
+ else
84
+ require 'sidekiq/middleware/server/retry_jobs'
85
+ Sidekiq::Middleware::Server::RetryJobs
86
+ end
87
+ end
88
+
65
89
  end
66
90
  end
67
91
 
68
92
  Sidekiq.configure_server do |config|
69
93
  config.server_middleware do |chain|
70
- chain.insert_before Sidekiq::Middleware::Server::RetryJobs,
94
+ chain.insert_before Sidekiq::Failures.retry_middleware_class,
71
95
  Sidekiq::Failures::Middleware
72
96
  end
73
97
  end
74
98
 
75
99
  if defined?(Sidekiq::Web)
76
- Sidekiq::Web.register Sidekiq::Failures::WebExtension
77
- Sidekiq::Web.tabs["Failures"] = "failures"
78
- Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "failures/locales")
100
+ if Sidekiq::Failures::WebExtension.legacy_sidekiq?
101
+ Sidekiq::Web.register Sidekiq::Failures::WebExtension
102
+ Sidekiq::Web.tabs["Failures"] = "failures"
103
+ Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "failures/locales")
104
+ else
105
+ Sidekiq::Web.configure do |config|
106
+ config.locales << File.join(File.dirname(__FILE__), "failures/locales")
107
+ config.register(Sidekiq::Failures::WebExtension, name: "failures", tab: ["Failures"], index: ["failures"])
108
+ end
109
+ end
79
110
  end
@@ -7,16 +7,23 @@ Gem::Specification.new do |gem|
7
7
  gem.description = %q{Keep track of Sidekiq failed jobs}
8
8
  gem.summary = %q{Keeps track of Sidekiq failed jobs and adds a tab to the Web UI to let you browse them. Makes use of Sidekiq's custom tabs and middleware chain.}
9
9
  gem.homepage = "https://github.com/mhfs/sidekiq-failures/"
10
+ gem.license = "MIT"
10
11
 
11
12
  gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
13
  gem.name = "sidekiq-failures"
15
14
  gem.require_paths = ["lib"]
16
15
  gem.version = Sidekiq::Failures::VERSION
17
16
 
18
- gem.add_dependency "sidekiq", ">= 2.16.0"
17
+ gem.add_dependency "sidekiq", ">= 4.0.0"
19
18
 
19
+ # Redis 4.X is incompatible with Ruby < 2.3, but the Ruby version constraint
20
+ # wasn't added until 4.1.2, meaning you can get an incompatible version of the
21
+ # redis gem when running Ruby 2.2 without this constraint.
22
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.3.0")
23
+ gem.add_dependency "redis", "< 4.0"
24
+ end
25
+
26
+ gem.add_development_dependency "minitest"
20
27
  gem.add_development_dependency "rake"
21
28
  gem.add_development_dependency "rack-test"
22
29
  gem.add_development_dependency "sprockets"
@@ -0,0 +1,16 @@
1
+ require "test_helper"
2
+
3
+ module Sidekiq
4
+ describe Failures do
5
+ describe '.retry_middleware_class' do
6
+ it 'returns based on Sidekiq::VERSION' do
7
+ case Sidekiq::VERSION[0]
8
+ when '5'
9
+ assert_equal Failures.retry_middleware_class, Sidekiq::JobRetry
10
+ when '4'
11
+ assert_equal Failures.retry_middleware_class, Sidekiq::Middleware::Server::RetryJobs
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,19 +1,84 @@
1
1
  require "test_helper"
2
2
 
3
+ class SidekiqPre6
4
+ def new_processor(boss)
5
+ num_options_calls.times { boss.expect(:options, {:queues => ['default'] }, []) }
6
+ ::Sidekiq::Processor.new(boss)
7
+ end
8
+
9
+ private
10
+
11
+ def num_options_calls
12
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('5.0.3')
13
+ 3
14
+ else
15
+ 2
16
+ end
17
+ end
18
+ end
19
+
20
+ class SidekiqPre63
21
+ def new_processor(boss)
22
+ opts = {
23
+ queues: ['default'],
24
+ }
25
+ opts[:fetch] = Sidekiq::BasicFetch.new(opts)
26
+ ::Sidekiq::Processor.new(boss, opts)
27
+ end
28
+ end
29
+
30
+ class SidekiqPost63
31
+ def new_processor(boss)
32
+ config = ::Sidekiq
33
+ config[:queues] = ['default']
34
+ config[:fetch] = ::Sidekiq::BasicFetch.new(config)
35
+ config[:error_handlers] << Sidekiq.method(:default_error_handler)
36
+ ::Sidekiq::Processor.new(config) { |processor, reason = nil| }
37
+ end
38
+ end
39
+
40
+ class SidekiqPost7
41
+ def new_processor(boss)
42
+ config = ::Sidekiq.default_configuration
43
+ ::Sidekiq::Processor.new(config.default_capsule) { |*args| }
44
+ end
45
+ end
46
+
3
47
  module Sidekiq
4
48
  module Failures
5
49
  describe "Middleware" do
50
+ def new_provider
51
+ version = Gem::Version.new(Sidekiq::VERSION)
52
+ if version >= Gem::Version.new('7')
53
+ SidekiqPost7
54
+ elsif version >= Gem::Version.new('6.4.0')
55
+ SidekiqPost63
56
+ elsif version >= Gem::Version.new('6.0')
57
+ SidekiqPre63
58
+ else
59
+ SidekiqPre6
60
+ end.new
61
+ end
62
+
6
63
  before do
7
- Celluloid.boot
8
64
  $invokes = 0
9
- @boss = MiniTest::Mock.new
10
- @processor = ::Sidekiq::Processor.new(@boss)
11
- Sidekiq.server_middleware {|chain| chain.add Sidekiq::Failures::Middleware }
12
- Sidekiq.redis = REDIS
13
- Sidekiq.redis { |c| c.flushdb }
65
+ @boss = Minitest::Mock.new
66
+ @provider = new_provider
67
+ @processor = @provider.new_processor(@boss)
68
+
69
+ Sidekiq.configure_server do |config|
70
+ config.server_middleware do |chain|
71
+ chain.add Sidekiq::Failures::Middleware
72
+ end
73
+ end
74
+ Sidekiq.redis(&:flushdb)
14
75
  Sidekiq.instance_eval { @failures_default_mode = nil }
15
76
  end
16
77
 
78
+ after do
79
+ @boss.verify
80
+ end
81
+
17
82
  TestException = Class.new(Exception)
18
83
  ShutdownException = Class.new(Sidekiq::Shutdown)
19
84
 
@@ -42,13 +107,8 @@ module Sidekiq
42
107
 
43
108
  assert_equal 0, failures_count
44
109
 
45
- actor = MiniTest::Mock.new
46
- actor.expect(:processor_done, nil, [@processor])
47
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
48
- 2.times { @boss.expect(:async, actor, []) }
49
-
50
110
  assert_raises TestException do
51
- @processor.process(msg)
111
+ @processor.send(:process, msg)
52
112
  end
53
113
 
54
114
  assert_equal 1, failures_count
@@ -60,13 +120,8 @@ module Sidekiq
60
120
 
61
121
  assert_equal 0, failures_count
62
122
 
63
- actor = MiniTest::Mock.new
64
- actor.expect(:processor_done, nil, [@processor])
65
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
66
- 2.times { @boss.expect(:async, actor, []) }
67
-
68
123
  assert_raises TestException do
69
- @processor.process(msg)
124
+ @processor.send(:process, msg)
70
125
  end
71
126
 
72
127
  assert_equal 1, failures_count
@@ -78,13 +133,7 @@ module Sidekiq
78
133
 
79
134
  assert_equal 0, failures_count
80
135
 
81
- actor = MiniTest::Mock.new
82
- actor.expect(:processor_done, nil, [@processor])
83
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
84
- 2.times { @boss.expect(:async, actor, []) }
85
-
86
- @processor.process(msg)
87
- @boss.verify
136
+ @processor.send(:process, msg)
88
137
 
89
138
  assert_equal 0, failures_count
90
139
  assert_equal 1, $invokes
@@ -95,13 +144,8 @@ module Sidekiq
95
144
 
96
145
  assert_equal 0, failures_count
97
146
 
98
- actor = MiniTest::Mock.new
99
- actor.expect(:processor_done, nil, [@processor])
100
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
101
- 2.times { @boss.expect(:async, actor, []) }
102
-
103
147
  assert_raises TestException do
104
- @processor.process(msg)
148
+ @processor.send(:process, msg)
105
149
  end
106
150
 
107
151
  assert_equal 0, failures_count
@@ -115,32 +159,21 @@ module Sidekiq
115
159
 
116
160
  assert_equal 0, failures_count
117
161
 
118
- actor = MiniTest::Mock.new
119
- actor.expect(:processor_done, nil, [@processor])
120
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
121
- 2.times { @boss.expect(:async, actor, []) }
122
-
123
162
  assert_raises TestException do
124
- @processor.process(msg)
163
+ @processor.send(:process, msg)
125
164
  end
126
165
 
127
166
  assert_equal 0, failures_count
128
167
  assert_equal 1, $invokes
129
168
  end
130
169
 
131
-
132
170
  it "doesn't record failure if going to be retired again and configured to track exhaustion" do
133
171
  msg = create_work('class' => MockWorker.to_s, 'args' => ['myarg'], 'retry' => true, 'failures' => 'exhausted')
134
172
 
135
173
  assert_equal 0, failures_count
136
174
 
137
- actor = MiniTest::Mock.new
138
- actor.expect(:processor_done, nil, [@processor])
139
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
140
- 2.times { @boss.expect(:async, actor, []) }
141
-
142
175
  assert_raises TestException do
143
- @processor.process(msg)
176
+ @processor.send(:process, msg)
144
177
  end
145
178
 
146
179
  assert_equal 0, failures_count
@@ -152,13 +185,8 @@ module Sidekiq
152
185
 
153
186
  assert_equal 0, failures_count
154
187
 
155
- actor = MiniTest::Mock.new
156
- actor.expect(:processor_done, nil, [@processor])
157
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
158
- 2.times { @boss.expect(:async, actor, []) }
159
-
160
188
  assert_raises TestException do
161
- @processor.process(msg)
189
+ @processor.send(:process, msg)
162
190
  end
163
191
 
164
192
  assert_equal 1, failures_count
@@ -170,13 +198,8 @@ module Sidekiq
170
198
 
171
199
  assert_equal 0, failures_count
172
200
 
173
- actor = MiniTest::Mock.new
174
- actor.expect(:processor_done, nil, [@processor])
175
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
176
- 2.times { @boss.expect(:async, actor, []) }
177
-
178
201
  assert_raises TestException do
179
- @processor.process(msg)
202
+ @processor.send(:process, msg)
180
203
  end
181
204
 
182
205
  assert_equal 1, failures_count
@@ -190,13 +213,8 @@ module Sidekiq
190
213
 
191
214
  assert_equal 0, failures_count
192
215
 
193
- actor = MiniTest::Mock.new
194
- actor.expect(:processor_done, nil, [@processor])
195
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
196
- 2.times { @boss.expect(:async, actor, []) }
197
-
198
216
  assert_raises TestException do
199
- @processor.process(msg)
217
+ @processor.send(:process, msg)
200
218
  end
201
219
 
202
220
  assert_equal 1, failures_count
@@ -210,13 +228,8 @@ module Sidekiq
210
228
 
211
229
  assert_equal 0, failures_count
212
230
 
213
- actor = MiniTest::Mock.new
214
- actor.expect(:processor_done, nil, [@processor])
215
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
216
- 2.times { @boss.expect(:async, actor, []) }
217
-
218
231
  assert_raises TestException do
219
- @processor.process(msg)
232
+ @processor.send(:process, msg)
220
233
  end
221
234
 
222
235
  assert_equal 1, failures_count
@@ -232,17 +245,14 @@ module Sidekiq
232
245
  assert_equal 0, failures_count
233
246
 
234
247
  3.times do
235
- boss = MiniTest::Mock.new
236
- processor = ::Sidekiq::Processor.new(boss)
237
-
238
- actor = MiniTest::Mock.new
239
- actor.expect(:processor_done, nil, [processor])
240
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
241
- 2.times { boss.expect(:async, actor, []) }
248
+ boss = Minitest::Mock.new
249
+ processor = @provider.new_processor(boss)
242
250
 
243
251
  assert_raises TestException do
244
- processor.process(msg)
252
+ processor.send(:process, msg)
245
253
  end
254
+
255
+ boss.verify
246
256
  end
247
257
 
248
258
  assert_equal 2, failures_count
@@ -259,13 +269,8 @@ module Sidekiq
259
269
 
260
270
  assert_equal 0, Sidekiq::Failures.count
261
271
 
262
- actor = MiniTest::Mock.new
263
- actor.expect(:processor_done, nil, [@processor])
264
- actor.expect(:real_thread, nil, [nil, Celluloid::Thread])
265
- @boss.expect(:async, actor, [])
266
-
267
272
  assert_raises TestException do
268
- @processor.process(msg)
273
+ @processor.send(:process, msg)
269
274
  end
270
275
 
271
276
  assert_equal 1, Sidekiq::Failures.count
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
- Encoding.default_external = Encoding::UTF_8
2
- Encoding.default_internal = Encoding::UTF_8
1
+ $TESTING = true
2
+
3
+ ENV["MT_CPU"] = "1" # Disable parallel testing to avoid flaky tests, force a single CPU for minitest
3
4
 
4
5
  require "minitest/autorun"
5
6
  require "minitest/spec"
@@ -7,14 +8,13 @@ require "minitest/mock"
7
8
 
8
9
  require "rack/test"
9
10
 
10
- require "celluloid"
11
11
  require "sidekiq"
12
+ require "sidekiq-pro" if ENV['SIDEKIQ_PRO_VERSION']
12
13
  require "sidekiq-failures"
13
14
  require "sidekiq/processor"
14
15
  require "sidekiq/fetch"
15
16
  require "sidekiq/cli"
16
17
 
17
- Celluloid.logger = nil
18
18
  Sidekiq.logger.level = Logger::ERROR
19
19
 
20
- REDIS = Sidekiq::RedisConnection.create(:url => "redis://localhost/15", :namespace => 'sidekiq_failures_test')
20
+ REDIS = Sidekiq::RedisConnection.create(url: "redis://127.0.0.1:6379/15") # Use DB 15 for testing