sidekiq 5.0.0.beta1 → 5.0.0.beta2

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.

Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +6 -0
  3. data/Pro-Changes.md +3 -2
  4. data/bin/sidekiqload +11 -11
  5. data/lib/sidekiq/api.rb +15 -8
  6. data/lib/sidekiq/job_retry.rb +15 -12
  7. data/lib/sidekiq/processor.rb +3 -2
  8. data/lib/sidekiq/version.rb +1 -1
  9. data/lib/sidekiq/web/application.rb +1 -1
  10. data/lib/sidekiq/web/helpers.rb +2 -1
  11. data/sidekiq.gemspec +2 -2
  12. data/web/views/retry.erb +1 -1
  13. metadata +3 -67
  14. data/test/config.yml +0 -9
  15. data/test/env_based_config.yml +0 -11
  16. data/test/fake_env.rb +0 -1
  17. data/test/fixtures/en.yml +0 -2
  18. data/test/helper.rb +0 -98
  19. data/test/test_actors.rb +0 -138
  20. data/test/test_api.rb +0 -529
  21. data/test/test_cli.rb +0 -418
  22. data/test/test_client.rb +0 -266
  23. data/test/test_exception_handler.rb +0 -56
  24. data/test/test_extensions.rb +0 -115
  25. data/test/test_fetch.rb +0 -50
  26. data/test/test_launcher.rb +0 -92
  27. data/test/test_logging.rb +0 -35
  28. data/test/test_manager.rb +0 -50
  29. data/test/test_middleware.rb +0 -158
  30. data/test/test_processor.rb +0 -266
  31. data/test/test_rails.rb +0 -22
  32. data/test/test_redis_connection.rb +0 -132
  33. data/test/test_retry.rb +0 -335
  34. data/test/test_retry_exhausted.rb +0 -149
  35. data/test/test_scheduled.rb +0 -115
  36. data/test/test_scheduling.rb +0 -58
  37. data/test/test_sidekiq.rb +0 -107
  38. data/test/test_testing.rb +0 -135
  39. data/test/test_testing_fake.rb +0 -352
  40. data/test/test_testing_inline.rb +0 -93
  41. data/test/test_util.rb +0 -13
  42. data/test/test_web.rb +0 -638
  43. data/test/test_web_auth.rb +0 -54
  44. data/test/test_web_helpers.rb +0 -54
  45. data/test/test_web_sessions.rb +0 -67
@@ -1,352 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- class TestFake < Sidekiq::Test
5
- describe 'sidekiq testing' do
6
- class PerformError < RuntimeError; end
7
-
8
- class DirectWorker
9
- include Sidekiq::Worker
10
- def perform(a, b)
11
- a + b
12
- end
13
- end
14
-
15
- class EnqueuedWorker
16
- include Sidekiq::Worker
17
- def perform(a, b)
18
- a + b
19
- end
20
- end
21
-
22
- class StoredWorker
23
- include Sidekiq::Worker
24
- def perform(error)
25
- raise PerformError if error
26
- end
27
- end
28
-
29
- before do
30
- require 'sidekiq/testing'
31
- Sidekiq::Testing.fake!
32
- EnqueuedWorker.jobs.clear
33
- DirectWorker.jobs.clear
34
- end
35
-
36
- after do
37
- Sidekiq::Testing.disable!
38
- Sidekiq::Queues.clear_all
39
- end
40
-
41
- it 'stubs the async call' do
42
- assert_equal 0, DirectWorker.jobs.size
43
- assert DirectWorker.perform_async(1, 2)
44
- assert_in_delta Time.now.to_f, DirectWorker.jobs.last['enqueued_at'], 0.01
45
- assert_equal 1, DirectWorker.jobs.size
46
- assert DirectWorker.perform_in(10, 1, 2)
47
- refute DirectWorker.jobs.last['enqueued_at']
48
- assert_equal 2, DirectWorker.jobs.size
49
- assert DirectWorker.perform_at(10, 1, 2)
50
- assert_equal 3, DirectWorker.jobs.size
51
- assert_in_delta 10.seconds.from_now.to_f, DirectWorker.jobs.last['at'], 0.01
52
- end
53
-
54
- describe 'delayed' do
55
- require 'action_mailer'
56
- class FooMailer < ActionMailer::Base
57
- def bar(str)
58
- str
59
- end
60
- end
61
-
62
- before do
63
- Sidekiq::Extensions.enable_delay!
64
- end
65
-
66
- it 'stubs the delay call on mailers' do
67
- assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
68
- FooMailer.delay.bar('hello!')
69
- assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
70
- end
71
-
72
- class Something
73
- def self.foo(x)
74
- end
75
- end
76
-
77
- it 'stubs the delay call on classes' do
78
- assert_equal 0, Sidekiq::Extensions::DelayedClass.jobs.size
79
- Something.delay.foo(Date.today)
80
- assert_equal 1, Sidekiq::Extensions::DelayedClass.jobs.size
81
- end
82
- end
83
-
84
- it 'stubs the enqueue call' do
85
- assert_equal 0, EnqueuedWorker.jobs.size
86
- assert Sidekiq::Client.enqueue(EnqueuedWorker, 1, 2)
87
- assert_equal 1, EnqueuedWorker.jobs.size
88
- end
89
-
90
- it 'stubs the enqueue_to call' do
91
- assert_equal 0, EnqueuedWorker.jobs.size
92
- assert Sidekiq::Client.enqueue_to('someq', EnqueuedWorker, 1, 2)
93
- assert_equal 1, Sidekiq::Queues['someq'].size
94
- end
95
-
96
- it 'executes all stored jobs' do
97
- assert StoredWorker.perform_async(false)
98
- assert StoredWorker.perform_async(true)
99
-
100
- assert_equal 2, StoredWorker.jobs.size
101
- assert_raises PerformError do
102
- StoredWorker.drain
103
- end
104
- assert_equal 0, StoredWorker.jobs.size
105
- end
106
-
107
- class SpecificJidWorker
108
- include Sidekiq::Worker
109
- class_attribute :count
110
- self.count = 0
111
- def perform(worker_jid)
112
- return unless worker_jid == self.jid
113
- self.class.count += 1
114
- end
115
- end
116
-
117
- it 'execute only jobs with assigned JID' do
118
- 4.times do |i|
119
- jid = SpecificJidWorker.perform_async(nil)
120
- if i % 2 == 0
121
- SpecificJidWorker.jobs[-1]["args"] = ["wrong_jid"]
122
- else
123
- SpecificJidWorker.jobs[-1]["args"] = [jid]
124
- end
125
- end
126
-
127
- SpecificJidWorker.perform_one
128
- assert_equal 0, SpecificJidWorker.count
129
-
130
- SpecificJidWorker.perform_one
131
- assert_equal 1, SpecificJidWorker.count
132
-
133
- SpecificJidWorker.drain
134
- assert_equal 2, SpecificJidWorker.count
135
- end
136
-
137
- it 'round trip serializes the job arguments' do
138
- assert StoredWorker.perform_async(:mike)
139
- job = StoredWorker.jobs.first
140
- assert_equal "mike", job['args'].first
141
- StoredWorker.clear
142
- end
143
-
144
- it 'perform_one runs only one job' do
145
- DirectWorker.perform_async(1, 2)
146
- DirectWorker.perform_async(3, 4)
147
- assert_equal 2, DirectWorker.jobs.size
148
-
149
- DirectWorker.perform_one
150
- assert_equal 1, DirectWorker.jobs.size
151
-
152
- DirectWorker.clear
153
- end
154
-
155
- it 'perform_one raise error upon empty queue' do
156
- DirectWorker.clear
157
- assert_raises Sidekiq::EmptyQueueError do
158
- DirectWorker.perform_one
159
- end
160
- end
161
-
162
- class FirstWorker
163
- include Sidekiq::Worker
164
- class_attribute :count
165
- self.count = 0
166
- def perform
167
- self.class.count += 1
168
- end
169
- end
170
-
171
- class SecondWorker
172
- include Sidekiq::Worker
173
- class_attribute :count
174
- self.count = 0
175
- def perform
176
- self.class.count += 1
177
- end
178
- end
179
-
180
- class ThirdWorker
181
- include Sidekiq::Worker
182
- class_attribute :count
183
- def perform
184
- FirstWorker.perform_async
185
- SecondWorker.perform_async
186
- end
187
- end
188
-
189
- it 'clears jobs across all workers' do
190
- Sidekiq::Worker.jobs.clear
191
- FirstWorker.count = 0
192
- SecondWorker.count = 0
193
-
194
- assert_equal 0, FirstWorker.jobs.size
195
- assert_equal 0, SecondWorker.jobs.size
196
-
197
- FirstWorker.perform_async
198
- SecondWorker.perform_async
199
-
200
- assert_equal 1, FirstWorker.jobs.size
201
- assert_equal 1, SecondWorker.jobs.size
202
-
203
- Sidekiq::Worker.clear_all
204
-
205
- assert_equal 0, FirstWorker.jobs.size
206
- assert_equal 0, SecondWorker.jobs.size
207
-
208
- assert_equal 0, FirstWorker.count
209
- assert_equal 0, SecondWorker.count
210
- end
211
-
212
- it 'drains jobs across all workers' do
213
- Sidekiq::Worker.jobs.clear
214
- FirstWorker.count = 0
215
- SecondWorker.count = 0
216
-
217
- assert_equal 0, FirstWorker.jobs.size
218
- assert_equal 0, SecondWorker.jobs.size
219
-
220
- assert_equal 0, FirstWorker.count
221
- assert_equal 0, SecondWorker.count
222
-
223
- FirstWorker.perform_async
224
- SecondWorker.perform_async
225
-
226
- assert_equal 1, FirstWorker.jobs.size
227
- assert_equal 1, SecondWorker.jobs.size
228
-
229
- Sidekiq::Worker.drain_all
230
-
231
- assert_equal 0, FirstWorker.jobs.size
232
- assert_equal 0, SecondWorker.jobs.size
233
-
234
- assert_equal 1, FirstWorker.count
235
- assert_equal 1, SecondWorker.count
236
- end
237
-
238
- it 'drains jobs across all workers even when workers create new jobs' do
239
- Sidekiq::Worker.jobs.clear
240
- FirstWorker.count = 0
241
- SecondWorker.count = 0
242
-
243
- assert_equal 0, ThirdWorker.jobs.size
244
-
245
- assert_equal 0, FirstWorker.count
246
- assert_equal 0, SecondWorker.count
247
-
248
- ThirdWorker.perform_async
249
-
250
- assert_equal 1, ThirdWorker.jobs.size
251
-
252
- Sidekiq::Worker.drain_all
253
-
254
- assert_equal 0, ThirdWorker.jobs.size
255
-
256
- assert_equal 1, FirstWorker.count
257
- assert_equal 1, SecondWorker.count
258
- end
259
-
260
- it 'drains jobs of workers with symbolized queue names' do
261
- Sidekiq::Worker.jobs.clear
262
-
263
- AltQueueWorker.perform_async(5,6)
264
- assert_equal 1, AltQueueWorker.jobs.size
265
-
266
- Sidekiq::Worker.drain_all
267
- assert_equal 0, AltQueueWorker.jobs.size
268
- end
269
-
270
- it 'can execute a job' do
271
- DirectWorker.execute_job(DirectWorker.new, [2, 3])
272
- end
273
- end
274
-
275
- describe 'queue testing' do
276
- before do
277
- require 'sidekiq/testing'
278
- Sidekiq::Testing.fake!
279
- end
280
-
281
- after do
282
- Sidekiq::Testing.disable!
283
- Sidekiq::Queues.clear_all
284
- end
285
-
286
- class QueueWorker
287
- include Sidekiq::Worker
288
- def perform(a, b)
289
- a + b
290
- end
291
- end
292
-
293
- class AltQueueWorker
294
- include Sidekiq::Worker
295
- sidekiq_options queue: :alt
296
- def perform(a, b)
297
- a + b
298
- end
299
- end
300
-
301
- it 'finds enqueued jobs' do
302
- assert_equal 0, Sidekiq::Queues["default"].size
303
-
304
- QueueWorker.perform_async(1, 2)
305
- QueueWorker.perform_async(1, 2)
306
- AltQueueWorker.perform_async(1, 2)
307
-
308
- assert_equal 2, Sidekiq::Queues["default"].size
309
- assert_equal [1, 2], Sidekiq::Queues["default"].first["args"]
310
-
311
- assert_equal 1, Sidekiq::Queues["alt"].size
312
- end
313
-
314
- it 'clears out all queues' do
315
- assert_equal 0, Sidekiq::Queues["default"].size
316
-
317
- QueueWorker.perform_async(1, 2)
318
- QueueWorker.perform_async(1, 2)
319
- AltQueueWorker.perform_async(1, 2)
320
-
321
- Sidekiq::Queues.clear_all
322
-
323
- assert_equal 0, Sidekiq::Queues["default"].size
324
- assert_equal 0, QueueWorker.jobs.size
325
- assert_equal 0, Sidekiq::Queues["alt"].size
326
- assert_equal 0, AltQueueWorker.jobs.size
327
- end
328
-
329
- it 'finds jobs enqueued by client' do
330
- Sidekiq::Client.push(
331
- 'class' => 'NonExistentWorker',
332
- 'queue' => 'missing',
333
- 'args' => [1]
334
- )
335
-
336
- assert_equal 1, Sidekiq::Queues["missing"].size
337
- end
338
-
339
- it 'respects underlying array changes' do
340
- # Rspec expect change() syntax saves a reference to
341
- # an underlying array. When the array containing jobs is
342
- # derived, Rspec test using `change(QueueWorker.jobs, :size).by(1)`
343
- # won't pass. This attempts to recreate that scenario
344
- # by saving a reference to the jobs array and ensuring
345
- # it changes properly on enqueueing
346
- jobs = QueueWorker.jobs
347
- assert_equal 0, jobs.size
348
- QueueWorker.perform_async(1, 2)
349
- assert_equal 1, jobs.size
350
- end
351
- end
352
- end
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- class TestInline < Sidekiq::Test
5
- describe 'sidekiq inline testing' do
6
- class InlineError < RuntimeError; end
7
- class ParameterIsNotString < RuntimeError; end
8
-
9
- class InlineWorker
10
- include Sidekiq::Worker
11
- def perform(pass)
12
- raise ArgumentError, "no jid" unless jid
13
- raise InlineError unless pass
14
- end
15
- end
16
-
17
- class InlineWorkerWithTimeParam
18
- include Sidekiq::Worker
19
- def perform(time)
20
- raise ParameterIsNotString unless time.is_a?(String) || time.is_a?(Numeric)
21
- end
22
- end
23
-
24
- before do
25
- require 'sidekiq/testing/inline'
26
- Sidekiq::Testing.inline!
27
- end
28
-
29
- after do
30
- Sidekiq::Testing.disable!
31
- end
32
-
33
- it 'stubs the async call when in testing mode' do
34
- assert InlineWorker.perform_async(true)
35
-
36
- assert_raises InlineError do
37
- InlineWorker.perform_async(false)
38
- end
39
- end
40
-
41
- describe 'delay' do
42
- require 'action_mailer'
43
- class InlineFooMailer < ActionMailer::Base
44
- def bar(str)
45
- raise InlineError
46
- end
47
- end
48
-
49
- class InlineFooModel
50
- def self.bar(str)
51
- raise InlineError
52
- end
53
- end
54
-
55
- before do
56
- Sidekiq::Extensions.enable_delay!
57
- end
58
-
59
- it 'stubs the delay call on mailers' do
60
- assert_raises InlineError do
61
- InlineFooMailer.delay.bar('three')
62
- end
63
- end
64
-
65
- it 'stubs the delay call on models' do
66
- assert_raises InlineError do
67
- InlineFooModel.delay.bar('three')
68
- end
69
- end
70
- end
71
-
72
- it 'stubs the enqueue call when in testing mode' do
73
- assert Sidekiq::Client.enqueue(InlineWorker, true)
74
-
75
- assert_raises InlineError do
76
- Sidekiq::Client.enqueue(InlineWorker, false)
77
- end
78
- end
79
-
80
- it 'stubs the push_bulk call when in testing mode' do
81
- assert Sidekiq::Client.push_bulk({'class' => InlineWorker, 'args' => [[true], [true]]})
82
-
83
- assert_raises InlineError do
84
- Sidekiq::Client.push_bulk({'class' => InlineWorker, 'args' => [[true], [false]]})
85
- end
86
- end
87
-
88
- it 'should relay parameters through json' do
89
- assert Sidekiq::Client.enqueue(InlineWorkerWithTimeParam, Time.now.to_f)
90
- end
91
-
92
- end
93
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- class TestUtil < Sidekiq::Test
5
-
6
- class Helpers
7
- include Sidekiq::Util
8
- end
9
-
10
- def test_nothing_atm
11
- assert true
12
- end
13
- end