sr-sidekiq 4.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/3.0-Upgrade.md +70 -0
  4. data/4.0-Upgrade.md +50 -0
  5. data/COMM-LICENSE (sidekiq) +95 -0
  6. data/Changes.md +1241 -0
  7. data/Ent-Changes.md +112 -0
  8. data/Gemfile +29 -0
  9. data/LICENSE (sidekiq) +9 -0
  10. data/LICENSE (sr-sidekiq) +5 -0
  11. data/Pro-2.0-Upgrade.md +138 -0
  12. data/Pro-3.0-Upgrade.md +44 -0
  13. data/Pro-Changes.md +539 -0
  14. data/README.md +8 -0
  15. data/Rakefile +9 -0
  16. data/bin/sidekiq +18 -0
  17. data/bin/sidekiqctl +99 -0
  18. data/bin/sidekiqload +167 -0
  19. data/code_of_conduct.md +50 -0
  20. data/lib/generators/sidekiq/templates/worker.rb.erb +9 -0
  21. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +6 -0
  22. data/lib/generators/sidekiq/templates/worker_test.rb.erb +8 -0
  23. data/lib/generators/sidekiq/worker_generator.rb +49 -0
  24. data/lib/sidekiq.rb +237 -0
  25. data/lib/sidekiq/api.rb +844 -0
  26. data/lib/sidekiq/cli.rb +389 -0
  27. data/lib/sidekiq/client.rb +260 -0
  28. data/lib/sidekiq/core_ext.rb +106 -0
  29. data/lib/sidekiq/exception_handler.rb +31 -0
  30. data/lib/sidekiq/extensions/action_mailer.rb +57 -0
  31. data/lib/sidekiq/extensions/active_record.rb +40 -0
  32. data/lib/sidekiq/extensions/class_methods.rb +40 -0
  33. data/lib/sidekiq/extensions/generic_proxy.rb +25 -0
  34. data/lib/sidekiq/fetch.rb +81 -0
  35. data/lib/sidekiq/launcher.rb +160 -0
  36. data/lib/sidekiq/logging.rb +106 -0
  37. data/lib/sidekiq/manager.rb +137 -0
  38. data/lib/sidekiq/middleware/chain.rb +150 -0
  39. data/lib/sidekiq/middleware/i18n.rb +42 -0
  40. data/lib/sidekiq/middleware/server/active_record.rb +13 -0
  41. data/lib/sidekiq/middleware/server/logging.rb +40 -0
  42. data/lib/sidekiq/middleware/server/retry_jobs.rb +205 -0
  43. data/lib/sidekiq/paginator.rb +43 -0
  44. data/lib/sidekiq/processor.rb +186 -0
  45. data/lib/sidekiq/rails.rb +39 -0
  46. data/lib/sidekiq/redis_connection.rb +97 -0
  47. data/lib/sidekiq/scheduled.rb +146 -0
  48. data/lib/sidekiq/testing.rb +316 -0
  49. data/lib/sidekiq/testing/inline.rb +29 -0
  50. data/lib/sidekiq/util.rb +62 -0
  51. data/lib/sidekiq/version.rb +4 -0
  52. data/lib/sidekiq/web.rb +278 -0
  53. data/lib/sidekiq/web_helpers.rb +255 -0
  54. data/lib/sidekiq/worker.rb +121 -0
  55. data/sidekiq.gemspec +26 -0
  56. data/sr-sidekiq-4.1.3.gem +0 -0
  57. data/sr-sidekiq-4.1.4.gem +0 -0
  58. data/sr-sidekiq-4.1.5.gem +0 -0
  59. data/test/config.yml +9 -0
  60. data/test/env_based_config.yml +11 -0
  61. data/test/fake_env.rb +1 -0
  62. data/test/fixtures/en.yml +2 -0
  63. data/test/helper.rb +75 -0
  64. data/test/test_actors.rb +138 -0
  65. data/test/test_api.rb +528 -0
  66. data/test/test_cli.rb +406 -0
  67. data/test/test_client.rb +262 -0
  68. data/test/test_exception_handler.rb +56 -0
  69. data/test/test_extensions.rb +127 -0
  70. data/test/test_fetch.rb +50 -0
  71. data/test/test_launcher.rb +85 -0
  72. data/test/test_logging.rb +35 -0
  73. data/test/test_manager.rb +50 -0
  74. data/test/test_middleware.rb +158 -0
  75. data/test/test_processor.rb +201 -0
  76. data/test/test_rails.rb +22 -0
  77. data/test/test_redis_connection.rb +127 -0
  78. data/test/test_retry.rb +326 -0
  79. data/test/test_retry_exhausted.rb +149 -0
  80. data/test/test_scheduled.rb +115 -0
  81. data/test/test_scheduling.rb +50 -0
  82. data/test/test_sidekiq.rb +107 -0
  83. data/test/test_testing.rb +143 -0
  84. data/test/test_testing_fake.rb +357 -0
  85. data/test/test_testing_inline.rb +94 -0
  86. data/test/test_util.rb +13 -0
  87. data/test/test_web.rb +614 -0
  88. data/test/test_web_helpers.rb +54 -0
  89. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  90. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  91. data/web/assets/images/favicon.ico +0 -0
  92. data/web/assets/images/logo.png +0 -0
  93. data/web/assets/images/status-sd8051fd480.png +0 -0
  94. data/web/assets/images/status/active.png +0 -0
  95. data/web/assets/images/status/idle.png +0 -0
  96. data/web/assets/javascripts/application.js +88 -0
  97. data/web/assets/javascripts/dashboard.js +300 -0
  98. data/web/assets/javascripts/locales/README.md +27 -0
  99. data/web/assets/javascripts/locales/jquery.timeago.ar.js +96 -0
  100. data/web/assets/javascripts/locales/jquery.timeago.bg.js +18 -0
  101. data/web/assets/javascripts/locales/jquery.timeago.bs.js +49 -0
  102. data/web/assets/javascripts/locales/jquery.timeago.ca.js +18 -0
  103. data/web/assets/javascripts/locales/jquery.timeago.cs.js +18 -0
  104. data/web/assets/javascripts/locales/jquery.timeago.cy.js +20 -0
  105. data/web/assets/javascripts/locales/jquery.timeago.da.js +18 -0
  106. data/web/assets/javascripts/locales/jquery.timeago.de.js +18 -0
  107. data/web/assets/javascripts/locales/jquery.timeago.el.js +18 -0
  108. data/web/assets/javascripts/locales/jquery.timeago.en-short.js +20 -0
  109. data/web/assets/javascripts/locales/jquery.timeago.en.js +20 -0
  110. data/web/assets/javascripts/locales/jquery.timeago.es.js +18 -0
  111. data/web/assets/javascripts/locales/jquery.timeago.et.js +18 -0
  112. data/web/assets/javascripts/locales/jquery.timeago.fa.js +22 -0
  113. data/web/assets/javascripts/locales/jquery.timeago.fi.js +28 -0
  114. data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +16 -0
  115. data/web/assets/javascripts/locales/jquery.timeago.fr.js +17 -0
  116. data/web/assets/javascripts/locales/jquery.timeago.he.js +18 -0
  117. data/web/assets/javascripts/locales/jquery.timeago.hr.js +49 -0
  118. data/web/assets/javascripts/locales/jquery.timeago.hu.js +18 -0
  119. data/web/assets/javascripts/locales/jquery.timeago.hy.js +18 -0
  120. data/web/assets/javascripts/locales/jquery.timeago.id.js +18 -0
  121. data/web/assets/javascripts/locales/jquery.timeago.it.js +16 -0
  122. data/web/assets/javascripts/locales/jquery.timeago.ja.js +19 -0
  123. data/web/assets/javascripts/locales/jquery.timeago.ko.js +17 -0
  124. data/web/assets/javascripts/locales/jquery.timeago.lt.js +20 -0
  125. data/web/assets/javascripts/locales/jquery.timeago.mk.js +20 -0
  126. data/web/assets/javascripts/locales/jquery.timeago.nl.js +20 -0
  127. data/web/assets/javascripts/locales/jquery.timeago.no.js +18 -0
  128. data/web/assets/javascripts/locales/jquery.timeago.pl.js +31 -0
  129. data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +16 -0
  130. data/web/assets/javascripts/locales/jquery.timeago.pt.js +16 -0
  131. data/web/assets/javascripts/locales/jquery.timeago.ro.js +18 -0
  132. data/web/assets/javascripts/locales/jquery.timeago.rs.js +49 -0
  133. data/web/assets/javascripts/locales/jquery.timeago.ru.js +34 -0
  134. data/web/assets/javascripts/locales/jquery.timeago.sk.js +18 -0
  135. data/web/assets/javascripts/locales/jquery.timeago.sl.js +44 -0
  136. data/web/assets/javascripts/locales/jquery.timeago.sv.js +18 -0
  137. data/web/assets/javascripts/locales/jquery.timeago.th.js +20 -0
  138. data/web/assets/javascripts/locales/jquery.timeago.tr.js +16 -0
  139. data/web/assets/javascripts/locales/jquery.timeago.uk.js +34 -0
  140. data/web/assets/javascripts/locales/jquery.timeago.uz.js +19 -0
  141. data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +20 -0
  142. data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +20 -0
  143. data/web/assets/stylesheets/application.css +754 -0
  144. data/web/assets/stylesheets/bootstrap.css +9 -0
  145. data/web/locales/cs.yml +78 -0
  146. data/web/locales/da.yml +68 -0
  147. data/web/locales/de.yml +69 -0
  148. data/web/locales/el.yml +68 -0
  149. data/web/locales/en.yml +79 -0
  150. data/web/locales/es.yml +69 -0
  151. data/web/locales/fr.yml +78 -0
  152. data/web/locales/hi.yml +75 -0
  153. data/web/locales/it.yml +69 -0
  154. data/web/locales/ja.yml +78 -0
  155. data/web/locales/ko.yml +68 -0
  156. data/web/locales/nb.yml +77 -0
  157. data/web/locales/nl.yml +68 -0
  158. data/web/locales/pl.yml +59 -0
  159. data/web/locales/pt-br.yml +68 -0
  160. data/web/locales/pt.yml +67 -0
  161. data/web/locales/ru.yml +78 -0
  162. data/web/locales/sv.yml +68 -0
  163. data/web/locales/ta.yml +75 -0
  164. data/web/locales/uk.yml +76 -0
  165. data/web/locales/zh-cn.yml +68 -0
  166. data/web/locales/zh-tw.yml +68 -0
  167. data/web/views/_footer.erb +17 -0
  168. data/web/views/_job_info.erb +88 -0
  169. data/web/views/_nav.erb +66 -0
  170. data/web/views/_paging.erb +23 -0
  171. data/web/views/_poll_js.erb +5 -0
  172. data/web/views/_poll_link.erb +7 -0
  173. data/web/views/_status.erb +4 -0
  174. data/web/views/_summary.erb +40 -0
  175. data/web/views/busy.erb +94 -0
  176. data/web/views/dashboard.erb +75 -0
  177. data/web/views/dead.erb +34 -0
  178. data/web/views/layout.erb +32 -0
  179. data/web/views/morgue.erb +71 -0
  180. data/web/views/queue.erb +45 -0
  181. data/web/views/queues.erb +28 -0
  182. data/web/views/retries.erb +74 -0
  183. data/web/views/retry.erb +34 -0
  184. data/web/views/scheduled.erb +54 -0
  185. data/web/views/scheduled_job_info.erb +8 -0
  186. metadata +408 -0
@@ -0,0 +1,357 @@
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_equal 1, DirectWorker.jobs.size
65
+ assert DirectWorker.perform_in(10, 1, 2)
66
+ assert_equal 2, DirectWorker.jobs.size
67
+ assert DirectWorker.perform_at(10, 1, 2)
68
+ assert_equal 3, DirectWorker.jobs.size
69
+ assert_in_delta 10.seconds.from_now.to_f, DirectWorker.jobs.last['at'], 0.01
70
+ end
71
+
72
+ it 'stubs the delay call on mailers' do
73
+ assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
74
+ FooMailer.delay.bar('hello!')
75
+ assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
76
+ end
77
+
78
+ class Something
79
+ def self.foo(x)
80
+ end
81
+ end
82
+
83
+ it 'stubs the delay call on models' do
84
+ assert_equal 0, Sidekiq::Extensions::DelayedClass.jobs.size
85
+ Something.delay.foo(Date.today)
86
+ assert_equal 1, Sidekiq::Extensions::DelayedClass.jobs.size
87
+ end
88
+
89
+ it 'stubs the enqueue call' do
90
+ assert_equal 0, EnqueuedWorker.jobs.size
91
+ assert Sidekiq::Client.enqueue(EnqueuedWorker, 1, 2)
92
+ assert_equal 1, EnqueuedWorker.jobs.size
93
+ end
94
+
95
+ it 'stubs the enqueue_to call' do
96
+ assert_equal 0, EnqueuedWorker.jobs.size
97
+ assert Sidekiq::Client.enqueue_to('someq', EnqueuedWorker, 1, 2)
98
+ assert_equal 1, Sidekiq::Queues['someq'].size
99
+ end
100
+
101
+ it 'executes all stored jobs' do
102
+ assert StoredWorker.perform_async(false)
103
+ assert StoredWorker.perform_async(true)
104
+
105
+ assert_equal 2, StoredWorker.jobs.size
106
+ assert_raises PerformError do
107
+ StoredWorker.drain
108
+ end
109
+ assert_equal 0, StoredWorker.jobs.size
110
+ end
111
+
112
+ class SpecificJidWorker
113
+ include Sidekiq::Worker
114
+ class_attribute :count
115
+ self.count = 0
116
+ def perform(worker_jid)
117
+ return unless worker_jid == self.jid
118
+ self.class.count += 1
119
+ end
120
+ end
121
+
122
+ it 'execute only jobs with assigned JID' do
123
+ 4.times do |i|
124
+ jid = SpecificJidWorker.perform_async(nil)
125
+ if i % 2 == 0
126
+ SpecificJidWorker.jobs[-1]["args"] = ["wrong_jid"]
127
+ else
128
+ SpecificJidWorker.jobs[-1]["args"] = [jid]
129
+ end
130
+ end
131
+
132
+ SpecificJidWorker.perform_one
133
+ assert_equal 0, SpecificJidWorker.count
134
+
135
+ SpecificJidWorker.perform_one
136
+ assert_equal 1, SpecificJidWorker.count
137
+
138
+ SpecificJidWorker.drain
139
+ assert_equal 2, SpecificJidWorker.count
140
+ end
141
+
142
+ it 'round trip serializes the job arguments' do
143
+ assert StoredWorker.perform_async(:mike)
144
+ job = StoredWorker.jobs.first
145
+ assert_equal "mike", job['args'].first
146
+ StoredWorker.clear
147
+ end
148
+
149
+ it 'perform_one runs only one job' do
150
+ DirectWorker.perform_async(1, 2)
151
+ DirectWorker.perform_async(3, 4)
152
+ assert_equal 2, DirectWorker.jobs.size
153
+
154
+ DirectWorker.perform_one
155
+ assert_equal 1, DirectWorker.jobs.size
156
+
157
+ DirectWorker.clear
158
+ end
159
+
160
+ it 'perform_one raise error upon empty queue' do
161
+ DirectWorker.clear
162
+ assert_raises Sidekiq::EmptyQueueError do
163
+ DirectWorker.perform_one
164
+ end
165
+ end
166
+
167
+ class FirstWorker
168
+ include Sidekiq::Worker
169
+ class_attribute :count
170
+ self.count = 0
171
+ def perform
172
+ self.class.count += 1
173
+ end
174
+ end
175
+
176
+ class SecondWorker
177
+ include Sidekiq::Worker
178
+ class_attribute :count
179
+ self.count = 0
180
+ def perform
181
+ self.class.count += 1
182
+ end
183
+ end
184
+
185
+ class ThirdWorker
186
+ include Sidekiq::Worker
187
+ class_attribute :count
188
+ def perform
189
+ FirstWorker.perform_async
190
+ SecondWorker.perform_async
191
+ end
192
+ end
193
+
194
+ it 'clears jobs across all workers' do
195
+ Sidekiq::Worker.jobs.clear
196
+ FirstWorker.count = 0
197
+ SecondWorker.count = 0
198
+
199
+ assert_equal 0, FirstWorker.jobs.size
200
+ assert_equal 0, SecondWorker.jobs.size
201
+
202
+ FirstWorker.perform_async
203
+ SecondWorker.perform_async
204
+
205
+ assert_equal 1, FirstWorker.jobs.size
206
+ assert_equal 1, SecondWorker.jobs.size
207
+
208
+ Sidekiq::Worker.clear_all
209
+
210
+ assert_equal 0, FirstWorker.jobs.size
211
+ assert_equal 0, SecondWorker.jobs.size
212
+
213
+ assert_equal 0, FirstWorker.count
214
+ assert_equal 0, SecondWorker.count
215
+ end
216
+
217
+ it 'drains jobs across all workers' do
218
+ Sidekiq::Worker.jobs.clear
219
+ FirstWorker.count = 0
220
+ SecondWorker.count = 0
221
+
222
+ assert_equal 0, FirstWorker.jobs.size
223
+ assert_equal 0, SecondWorker.jobs.size
224
+
225
+ assert_equal 0, FirstWorker.count
226
+ assert_equal 0, SecondWorker.count
227
+
228
+ FirstWorker.perform_async
229
+ SecondWorker.perform_async
230
+
231
+ assert_equal 1, FirstWorker.jobs.size
232
+ assert_equal 1, SecondWorker.jobs.size
233
+
234
+ Sidekiq::Worker.drain_all
235
+
236
+ assert_equal 0, FirstWorker.jobs.size
237
+ assert_equal 0, SecondWorker.jobs.size
238
+
239
+ assert_equal 1, FirstWorker.count
240
+ assert_equal 1, SecondWorker.count
241
+ end
242
+
243
+ it 'drains jobs across all workers even when workers create new jobs' do
244
+ Sidekiq::Worker.jobs.clear
245
+ FirstWorker.count = 0
246
+ SecondWorker.count = 0
247
+
248
+ assert_equal 0, ThirdWorker.jobs.size
249
+
250
+ assert_equal 0, FirstWorker.count
251
+ assert_equal 0, SecondWorker.count
252
+
253
+ ThirdWorker.perform_async
254
+
255
+ assert_equal 1, ThirdWorker.jobs.size
256
+
257
+ Sidekiq::Worker.drain_all
258
+
259
+ assert_equal 0, ThirdWorker.jobs.size
260
+
261
+ assert_equal 1, FirstWorker.count
262
+ assert_equal 1, SecondWorker.count
263
+ end
264
+
265
+ it 'drains jobs of workers with symbolized queue names' do
266
+ Sidekiq::Worker.jobs.clear
267
+
268
+ AltQueueWorker.perform_async(5,6)
269
+ assert_equal 1, AltQueueWorker.jobs.size
270
+
271
+ Sidekiq::Worker.drain_all
272
+ assert_equal 0, AltQueueWorker.jobs.size
273
+ end
274
+
275
+ it 'can execute a job' do
276
+ DirectWorker.execute_job(DirectWorker.new, [2, 3])
277
+ end
278
+ end
279
+
280
+ describe 'queue testing' do
281
+ before do
282
+ require 'sidekiq/testing'
283
+ Sidekiq::Testing.fake!
284
+ end
285
+
286
+ after do
287
+ Sidekiq::Testing.disable!
288
+ Sidekiq::Queues.clear_all
289
+ end
290
+
291
+ class QueueWorker
292
+ include Sidekiq::Worker
293
+ def perform(a, b)
294
+ a + b
295
+ end
296
+ end
297
+
298
+ class AltQueueWorker
299
+ include Sidekiq::Worker
300
+ sidekiq_options queue: :alt
301
+ def perform(a, b)
302
+ a + b
303
+ end
304
+ end
305
+
306
+ it 'finds enqueued jobs' do
307
+ assert_equal 0, Sidekiq::Queues["default"].size
308
+
309
+ QueueWorker.perform_async(1, 2)
310
+ QueueWorker.perform_async(1, 2)
311
+ AltQueueWorker.perform_async(1, 2)
312
+
313
+ assert_equal 2, Sidekiq::Queues["default"].size
314
+ assert_equal [1, 2], Sidekiq::Queues["default"].first["args"]
315
+
316
+ assert_equal 1, Sidekiq::Queues["alt"].size
317
+ end
318
+
319
+ it 'clears out all queues' do
320
+ assert_equal 0, Sidekiq::Queues["default"].size
321
+
322
+ QueueWorker.perform_async(1, 2)
323
+ QueueWorker.perform_async(1, 2)
324
+ AltQueueWorker.perform_async(1, 2)
325
+
326
+ Sidekiq::Queues.clear_all
327
+
328
+ assert_equal 0, Sidekiq::Queues["default"].size
329
+ assert_equal 0, QueueWorker.jobs.size
330
+ assert_equal 0, Sidekiq::Queues["alt"].size
331
+ assert_equal 0, AltQueueWorker.jobs.size
332
+ end
333
+
334
+ it 'finds jobs enqueued by client' do
335
+ Sidekiq::Client.push(
336
+ 'class' => 'NonExistentWorker',
337
+ 'queue' => 'missing',
338
+ 'args' => [1]
339
+ )
340
+
341
+ assert_equal 1, Sidekiq::Queues["missing"].size
342
+ end
343
+
344
+ it 'respects underlying array changes' do
345
+ # Rspec expect change() syntax saves a reference to
346
+ # an underlying array. When the array containing jobs is
347
+ # derived, Rspec test using `change(QueueWorker.jobs, :size).by(1)`
348
+ # won't pass. This attempts to recreate that scenario
349
+ # by saving a reference to the jobs array and ensuring
350
+ # it changes properly on enqueueing
351
+ jobs = QueueWorker.jobs
352
+ assert_equal 0, jobs.size
353
+ QueueWorker.perform_async(1, 2)
354
+ assert_equal 1, jobs.size
355
+ end
356
+ end
357
+ end
@@ -0,0 +1,94 @@
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