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_cli.rb CHANGED
@@ -168,35 +168,14 @@ class TestCli < Sidekiq::Test
168
168
  @cli.parse(['sidekiq', '-C', './test/config.yml'])
169
169
  end
170
170
 
171
- it 'takes a path' do
171
+ it 'parses as expected' do
172
172
  assert_equal './test/config.yml', Sidekiq.options[:config_file]
173
- end
174
-
175
- it 'sets verbose' do
176
173
  refute Sidekiq.options[:verbose]
177
- end
178
-
179
- it 'sets require file' do
180
174
  assert_equal './test/fake_env.rb', Sidekiq.options[:require]
181
- end
182
-
183
- it 'does not set environment' do
184
175
  assert_equal nil, Sidekiq.options[:environment]
185
- end
186
-
187
- it 'sets concurrency' do
188
176
  assert_equal 50, Sidekiq.options[:concurrency]
189
- end
190
-
191
- it 'sets pid file' do
192
177
  assert_equal '/tmp/sidekiq-config-test.pid', Sidekiq.options[:pidfile]
193
- end
194
-
195
- it 'sets logfile' do
196
178
  assert_equal '/tmp/sidekiq.log', Sidekiq.options[:logfile]
197
- end
198
-
199
- it 'sets queues' do
200
179
  assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
201
180
  assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
202
181
  end
@@ -207,35 +186,14 @@ class TestCli < Sidekiq::Test
207
186
  @cli.parse(['sidekiq', '-e', 'staging', '-C', './test/env_based_config.yml'])
208
187
  end
209
188
 
210
- it 'takes a path' do
189
+ it 'parses as expected' do
211
190
  assert_equal './test/env_based_config.yml', Sidekiq.options[:config_file]
212
- end
213
-
214
- it 'sets verbose' do
215
191
  refute Sidekiq.options[:verbose]
216
- end
217
-
218
- it 'sets require file' do
219
192
  assert_equal './test/fake_env.rb', Sidekiq.options[:require]
220
- end
221
-
222
- it 'sets environment' do
223
193
  assert_equal 'staging', Sidekiq.options[:environment]
224
- end
225
-
226
- it 'sets concurrency' do
227
194
  assert_equal 5, Sidekiq.options[:concurrency]
228
- end
229
-
230
- it 'sets pid file' do
231
195
  assert_equal '/tmp/sidekiq-config-test.pid', Sidekiq.options[:pidfile]
232
- end
233
-
234
- it 'sets logfile' do
235
196
  assert_equal '/tmp/sidekiq.log', Sidekiq.options[:logfile]
236
- end
237
-
238
- it 'sets queues' do
239
197
  assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
240
198
  assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
241
199
  end
@@ -297,23 +255,11 @@ class TestCli < Sidekiq::Test
297
255
  File.unlink @tmp_path if File.exist? @tmp_path
298
256
  end
299
257
 
300
- it 'uses concurrency flag' do
258
+ it 'gives the expected options' do
301
259
  assert_equal 100, Sidekiq.options[:concurrency]
302
- end
303
-
304
- it 'uses require file flag' do
305
260
  assert_equal @tmp_lib_path, Sidekiq.options[:require]
306
- end
307
-
308
- it 'uses environment flag' do
309
261
  assert_equal 'snoop', Sidekiq.options[:environment]
310
- end
311
-
312
- it 'uses pidfile flag' do
313
262
  assert_equal @tmp_path, Sidekiq.options[:pidfile]
314
- end
315
-
316
- it 'sets queues' do
317
263
  assert_equal 7, Sidekiq.options[:queues].count { |q| q == 'often' }
318
264
  assert_equal 3, Sidekiq.options[:queues].count { |q| q == 'seldom' }
319
265
  end
data/test/test_client.rb CHANGED
@@ -1,33 +1,7 @@
1
1
  require_relative 'helper'
2
- require 'sidekiq/client'
3
- require 'sidekiq/worker'
4
2
 
5
3
  class TestClient < Sidekiq::Test
6
- describe 'with mock redis' do
7
- before do
8
- @redis = Minitest::Mock.new
9
- def @redis.multi; [yield] * 2 if block_given?; end
10
- def @redis.set(*); true; end
11
- def @redis.sadd(*); true; end
12
- def @redis.srem(*); true; end
13
- def @redis.get(*); nil; end
14
- def @redis.del(*); nil; end
15
- def @redis.incrby(*); nil; end
16
- def @redis.setex(*); true; end
17
- def @redis.expire(*); true; end
18
- def @redis.watch(*); true; end
19
- def @redis.with_connection; yield self; end
20
- def @redis.with; yield self; end
21
- def @redis.exec; true; end
22
- Sidekiq.instance_variable_set(:@redis, @redis)
23
- Sidekiq::Client.instance_variable_set(:@default, nil)
24
- end
25
-
26
- after do
27
- Sidekiq.redis = REDIS
28
- Sidekiq::Client.instance_variable_set(:@default, nil)
29
- end
30
-
4
+ describe 'errors' do
31
5
  it 'raises ArgumentError with invalid params' do
32
6
  assert_raises ArgumentError do
33
7
  Sidekiq::Client.push('foo', 1)
@@ -49,112 +23,71 @@ class TestClient < Sidekiq::Test
49
23
  Sidekiq::Client.push('queue' => 'foo', 'class' => MyWorker, 'args' => 1)
50
24
  end
51
25
  end
26
+ end
52
27
 
53
- describe 'as instance' do
54
- it 'can push' do
55
- @redis.expect :lpush, 1, ['queue:default', Array]
56
- client = Sidekiq::Client.new
57
- jid = client.push('class' => 'Blah', 'args' => [1,2,3])
58
- assert_equal 24, jid.size
59
- end
60
-
61
- it 'allows local middleware modification' do
62
- @redis.expect :lpush, 1, ['queue:default', Array]
63
- $called = false
64
- mware = Class.new { def call(worker_klass,msg,q,r); $called = true; msg;end }
65
- client = Sidekiq::Client.new
66
- client.middleware do |chain|
67
- chain.add mware
68
- end
69
- client.push('class' => 'Blah', 'args' => [1,2,3])
28
+ describe 'as instance' do
29
+ it 'can push' do
30
+ client = Sidekiq::Client.new
31
+ jid = client.push('class' => 'Blah', 'args' => [1,2,3])
32
+ assert_equal 24, jid.size
33
+ end
70
34
 
71
- assert $called
72
- assert client.middleware.exists?(mware)
73
- refute Sidekiq.client_middleware.exists?(mware)
35
+ it 'allows local middleware modification' do
36
+ $called = false
37
+ mware = Class.new { def call(worker_klass,msg,q,r); $called = true; msg;end }
38
+ client = Sidekiq::Client.new
39
+ client.middleware do |chain|
40
+ chain.add mware
74
41
  end
42
+ client.push('class' => 'Blah', 'args' => [1,2,3])
43
+
44
+ assert $called
45
+ assert client.middleware.exists?(mware)
46
+ refute Sidekiq.client_middleware.exists?(mware)
75
47
  end
48
+ end
76
49
 
50
+ describe 'client' do
77
51
  it 'pushes messages to redis' do
78
- @redis.expect :lpush, 1, ['queue:foo', Array]
79
- pushed = Sidekiq::Client.push('queue' => 'foo', 'class' => MyWorker, 'args' => [1, 2])
80
- assert pushed
81
- assert_equal 24, pushed.size
82
- @redis.verify
52
+ q = Sidekiq::Queue.new('foo')
53
+ pre = q.size
54
+ jid = Sidekiq::Client.push('queue' => 'foo', 'class' => MyWorker, 'args' => [1, 2])
55
+ assert jid
56
+ assert_equal 24, jid.size
57
+ assert_equal pre + 1, q.size
83
58
  end
84
59
 
85
60
  it 'pushes messages to redis using a String class' do
86
- @redis.expect :lpush, 1, ['queue:foo', Array]
87
- pushed = Sidekiq::Client.push('queue' => 'foo', 'class' => 'MyWorker', 'args' => [1, 2])
88
- assert pushed
89
- assert_equal 24, pushed.size
90
- @redis.verify
61
+ q = Sidekiq::Queue.new('foo')
62
+ pre = q.size
63
+ jid = Sidekiq::Client.push('queue' => 'foo', 'class' => 'MyWorker', 'args' => [1, 2])
64
+ assert jid
65
+ assert_equal 24, jid.size
66
+ assert_equal pre + 1, q.size
91
67
  end
92
68
 
93
69
  class MyWorker
94
70
  include Sidekiq::Worker
95
71
  end
96
72
 
97
- it 'has default options' do
98
- assert_equal Sidekiq.default_worker_options, MyWorker.get_sidekiq_options
99
- end
100
-
101
- it 'handles perform_async' do
102
- @redis.expect :lpush, 1, ['queue:default', Array]
103
- pushed = MyWorker.perform_async(1, 2)
104
- assert pushed
105
- @redis.verify
106
- end
107
-
108
- it 'enqueues messages to redis' do
109
- @redis.expect :lpush, 1, ['queue:default', Array]
110
- pushed = Sidekiq::Client.enqueue(MyWorker, 1, 2)
111
- assert pushed
112
- @redis.verify
113
- end
114
-
115
- it 'enqueues messages to redis' do
116
- @redis.expect :lpush, 1, ['queue:custom_queue', Array]
117
- pushed = Sidekiq::Client.enqueue_to(:custom_queue, MyWorker, 1, 2)
118
- assert pushed
119
- @redis.verify
120
- end
121
-
122
- it 'enqueues messages to redis (delayed, custom queue)' do
123
- @redis.expect :zadd, 1, ['schedule', Array]
124
- pushed = Sidekiq::Client.enqueue_to_in(:custom_queue, 3.minutes, MyWorker, 1, 2)
125
- assert pushed
126
- @redis.verify
127
- end
128
-
129
- it 'enqueues messages to redis (delayed into past, custom queue)' do
130
- @redis.expect :lpush, 1, ['queue:custom_queue', Array]
131
- pushed = Sidekiq::Client.enqueue_to_in(:custom_queue, -3.minutes, MyWorker, 1, 2)
132
- assert pushed
133
- @redis.verify
134
- end
135
-
136
- it 'enqueues messages to redis (delayed)' do
137
- @redis.expect :zadd, 1, ['schedule', Array]
138
- pushed = Sidekiq::Client.enqueue_in(3.minutes, MyWorker, 1, 2)
139
- assert pushed
140
- @redis.verify
141
- end
142
-
143
73
  class QueuedWorker
144
74
  include Sidekiq::Worker
145
75
  sidekiq_options :queue => :flimflam
146
76
  end
147
77
 
148
- it 'enqueues to the named queue' do
149
- @redis.expect :lpush, 1, ['queue:flimflam', Array]
150
- pushed = QueuedWorker.perform_async(1, 2)
151
- assert pushed
152
- @redis.verify
153
- end
154
-
155
- it 'retrieves queues' do
156
- @redis.expect :smembers, ['bob'], ['queues']
157
- assert_equal ['bob'], Sidekiq::Queue.all.map(&:name)
78
+ it 'enqueues' do
79
+ Sidekiq.redis {|c| c.flushdb }
80
+ assert_equal Sidekiq.default_worker_options, MyWorker.get_sidekiq_options
81
+ assert MyWorker.perform_async(1, 2)
82
+ assert Sidekiq::Client.enqueue(MyWorker, 1, 2)
83
+ assert Sidekiq::Client.enqueue_to(:custom_queue, MyWorker, 1, 2)
84
+ assert_equal 1, Sidekiq::Queue.new('custom_queue').size
85
+ assert Sidekiq::Client.enqueue_to_in(:custom_queue, 3.minutes, MyWorker, 1, 2)
86
+ assert Sidekiq::Client.enqueue_to_in(:custom_queue, -3.minutes, MyWorker, 1, 2)
87
+ assert_equal 2, Sidekiq::Queue.new('custom_queue').size
88
+ assert Sidekiq::Client.enqueue_in(3.minutes, MyWorker, 1, 2)
89
+ assert QueuedWorker.perform_async(1, 2)
90
+ assert_equal 1, Sidekiq::Queue.new('flimflam').size
158
91
  end
159
92
  end
160
93
 
@@ -191,24 +124,23 @@ class TestClient < Sidekiq::Test
191
124
  end
192
125
 
193
126
  describe 'client middleware' do
194
-
195
127
  class Stopper
196
- def call(worker_class, message, queue, r)
128
+ def call(worker_class, job, queue, r)
197
129
  raise ArgumentError unless r
198
- yield if message['args'].first.odd?
130
+ yield if job['args'].first.odd?
199
131
  end
200
132
  end
201
133
 
202
134
  it 'can stop some of the jobs from pushing' do
203
- Sidekiq.client_middleware.add Stopper
204
- begin
205
- assert_equal nil, Sidekiq::Client.push('class' => MyWorker, 'args' => [0])
206
- assert_match(/[0-9a-f]{12}/, Sidekiq::Client.push('class' => MyWorker, 'args' => [1]))
207
- Sidekiq::Client.push_bulk('class' => MyWorker, 'args' => [[0], [1]]).each do |jid|
208
- assert_match(/[0-9a-f]{12}/, jid)
209
- end
210
- ensure
211
- Sidekiq.client_middleware.remove Stopper
135
+ client = Sidekiq::Client.new
136
+ client.middleware do |chain|
137
+ chain.add Stopper
138
+ end
139
+
140
+ assert_equal nil, client.push('class' => MyWorker, 'args' => [0])
141
+ assert_match(/[0-9a-f]{12}/, client.push('class' => MyWorker, 'args' => [1]))
142
+ client.push_bulk('class' => MyWorker, 'args' => [[0], [1]]).each do |jid|
143
+ assert_match(/[0-9a-f]{12}/, jid)
212
144
  end
213
145
  end
214
146
  end
@@ -220,19 +152,10 @@ class TestClient < Sidekiq::Test
220
152
  end
221
153
  end
222
154
 
223
- describe 'item normalization' do
224
- it 'defaults retry to true' do
225
- assert_equal true, Sidekiq::Client.new.__send__(:normalize_item, 'class' => QueuedWorker, 'args' => [])['retry']
226
- end
227
-
228
- it "does not normalize numeric retry's" do
229
- assert_equal 2, Sidekiq::Client.new.__send__(:normalize_item, 'class' => CWorker, 'args' => [])['retry']
230
- end
231
- end
232
-
233
155
  describe 'sharding' do
234
156
  class DWorker < BaseWorker
235
157
  end
158
+
236
159
  it 'allows sidekiq_options to point to different Redi' do
237
160
  conn = MiniTest::Mock.new
238
161
  conn.expect(:multi, [0, 1])
@@ -240,6 +163,7 @@ class TestClient < Sidekiq::Test
240
163
  DWorker.perform_async(1,2,3)
241
164
  conn.verify
242
165
  end
166
+
243
167
  it 'allows #via to point to different Redi' do
244
168
  conn = MiniTest::Mock.new
245
169
  conn.expect(:multi, [0, 1])
@@ -257,6 +181,7 @@ class TestClient < Sidekiq::Test
257
181
  assert_equal default, Sidekiq::Client.new.redis_pool
258
182
  conn.verify
259
183
  end
184
+
260
185
  it 'allows Resque helpers to point to different Redi' do
261
186
  conn = MiniTest::Mock.new
262
187
  conn.expect(:multi, []) { |*args, &block| block.call }
@@ -23,30 +23,34 @@ class TestExtensions < Sidekiq::Test
23
23
 
24
24
  it 'allows delayed execution of ActiveRecord class methods' do
25
25
  assert_equal [], Sidekiq::Queue.all.map(&:name)
26
- assert_equal 0, Sidekiq.redis {|c| c.llen('queue:default') }
26
+ q = Sidekiq::Queue.new
27
+ assert_equal 0, q.size
27
28
  MyModel.delay.long_class_method
28
29
  assert_equal ['default'], Sidekiq::Queue.all.map(&:name)
29
- assert_equal 1, Sidekiq.redis {|c| c.llen('queue:default') }
30
+ assert_equal 1, q.size
30
31
  end
31
32
 
32
33
  it 'uses and stringifies specified options' do
33
34
  assert_equal [], Sidekiq::Queue.all.map(&:name)
34
- assert_equal 0, Sidekiq.redis {|c| c.llen('queue:notdefault') }
35
+ q = Sidekiq::Queue.new('notdefault')
36
+ assert_equal 0, q.size
35
37
  MyModel.delay(queue: :notdefault).long_class_method
36
38
  assert_equal ['notdefault'], Sidekiq::Queue.all.map(&:name)
37
- assert_equal 1, Sidekiq.redis {|c| c.llen('queue:notdefault') }
39
+ assert_equal 1, q.size
38
40
  end
39
41
 
40
42
  it 'allows delayed scheduling of AR class methods' do
41
- assert_equal 0, Sidekiq.redis {|c| c.zcard('schedule') }
43
+ ss = Sidekiq::ScheduledSet.new
44
+ assert_equal 0, ss.size
42
45
  MyModel.delay_for(5.days).long_class_method
43
- assert_equal 1, Sidekiq.redis {|c| c.zcard('schedule') }
46
+ assert_equal 1, ss.size
44
47
  end
45
48
 
46
49
  it 'allows until delayed scheduling of AR class methods' do
47
- assert_equal 0, Sidekiq.redis {|c| c.zcard('schedule') }
50
+ ss = Sidekiq::ScheduledSet.new
51
+ assert_equal 0, ss.size
48
52
  MyModel.delay_until(1.day.from_now).long_class_method
49
- assert_equal 1, Sidekiq.redis {|c| c.zcard('schedule') }
53
+ assert_equal 1, ss.size
50
54
  end
51
55
 
52
56
  class UserMailer < ActionMailer::Base
@@ -57,22 +61,25 @@ class TestExtensions < Sidekiq::Test
57
61
 
58
62
  it 'allows delayed delivery of ActionMailer mails' do
59
63
  assert_equal [], Sidekiq::Queue.all.map(&:name)
60
- assert_equal 0, Sidekiq.redis {|c| c.llen('queue:default') }
64
+ q = Sidekiq::Queue.new
65
+ assert_equal 0, q.size
61
66
  UserMailer.delay.greetings(1, 2)
62
67
  assert_equal ['default'], Sidekiq::Queue.all.map(&:name)
63
- assert_equal 1, Sidekiq.redis {|c| c.llen('queue:default') }
68
+ assert_equal 1, q.size
64
69
  end
65
70
 
66
71
  it 'allows delayed scheduling of AM mails' do
67
- assert_equal 0, Sidekiq.redis {|c| c.zcard('schedule') }
72
+ ss = Sidekiq::ScheduledSet.new
73
+ assert_equal 0, ss.size
68
74
  UserMailer.delay_for(5.days).greetings(1, 2)
69
- assert_equal 1, Sidekiq.redis {|c| c.zcard('schedule') }
75
+ assert_equal 1, ss.size
70
76
  end
71
77
 
72
78
  it 'allows until delay scheduling of AM mails' do
73
- assert_equal 0, Sidekiq.redis {|c| c.zcard('schedule') }
79
+ ss = Sidekiq::ScheduledSet.new
80
+ assert_equal 0, ss.size
74
81
  UserMailer.delay_until(5.days.from_now).greetings(1, 2)
75
- assert_equal 1, Sidekiq.redis {|c| c.zcard('schedule') }
82
+ assert_equal 1, ss.size
76
83
  end
77
84
 
78
85
  class SomeClass
@@ -81,9 +88,10 @@ class TestExtensions < Sidekiq::Test
81
88
  end
82
89
 
83
90
  it 'allows delay of any ole class method' do
84
- assert_equal 0, queue_size
91
+ q = Sidekiq::Queue.new
92
+ assert_equal 0, q.size
85
93
  SomeClass.delay.doit(Date.today)
86
- assert_equal 1, queue_size
94
+ assert_equal 1, q.size
87
95
  end
88
96
 
89
97
  module SomeModule
@@ -92,18 +100,16 @@ class TestExtensions < Sidekiq::Test
92
100
  end
93
101
 
94
102
  it 'allows delay of any module class method' do
95
- assert_equal 0, queue_size
103
+ q = Sidekiq::Queue.new
104
+ assert_equal 0, q.size
96
105
  SomeModule.delay.doit(Date.today)
97
- assert_equal 1, queue_size
98
- end
99
-
100
- def queue_size(name='default')
101
- Sidekiq::Queue.new(name).size
106
+ assert_equal 1, q.size
102
107
  end
103
108
 
104
109
  it 'allows removing of the #delay methods' do
110
+ q = Sidekiq::Queue.new
105
111
  Sidekiq.remove_delay!
106
- assert_equal 0, queue_size
112
+ assert_equal 0, q.size
107
113
  assert_raises NoMethodError do
108
114
  SomeModule.delay.doit(Date.today)
109
115
  end