sidekiq 4.2.9 → 4.2.10

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