sidekiq 3.5.4 → 5.2.7

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 (175) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +61 -0
  3. data/{Contributing.md → .github/contributing.md} +0 -0
  4. data/.github/issue_template.md +11 -0
  5. data/.gitignore +3 -0
  6. data/.travis.yml +5 -10
  7. data/4.0-Upgrade.md +53 -0
  8. data/5.0-Upgrade.md +56 -0
  9. data/COMM-LICENSE +13 -11
  10. data/Changes.md +376 -1
  11. data/Ent-Changes.md +201 -2
  12. data/Gemfile +14 -18
  13. data/LICENSE +1 -1
  14. data/Pro-3.0-Upgrade.md +44 -0
  15. data/Pro-4.0-Upgrade.md +35 -0
  16. data/Pro-Changes.md +307 -2
  17. data/README.md +34 -22
  18. data/Rakefile +3 -3
  19. data/bin/sidekiq +0 -1
  20. data/bin/sidekiqctl +13 -86
  21. data/bin/sidekiqload +23 -27
  22. data/code_of_conduct.md +50 -0
  23. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +3 -3
  24. data/lib/generators/sidekiq/templates/worker_test.rb.erb +6 -6
  25. data/lib/sidekiq.rb +72 -25
  26. data/lib/sidekiq/api.rb +206 -73
  27. data/lib/sidekiq/cli.rb +145 -101
  28. data/lib/sidekiq/client.rb +42 -36
  29. data/lib/sidekiq/core_ext.rb +1 -105
  30. data/lib/sidekiq/ctl.rb +221 -0
  31. data/lib/sidekiq/delay.rb +42 -0
  32. data/lib/sidekiq/exception_handler.rb +4 -5
  33. data/lib/sidekiq/extensions/action_mailer.rb +1 -0
  34. data/lib/sidekiq/extensions/active_record.rb +1 -0
  35. data/lib/sidekiq/extensions/class_methods.rb +1 -0
  36. data/lib/sidekiq/extensions/generic_proxy.rb +8 -1
  37. data/lib/sidekiq/fetch.rb +36 -111
  38. data/lib/sidekiq/job_logger.rb +25 -0
  39. data/lib/sidekiq/job_retry.rb +262 -0
  40. data/lib/sidekiq/launcher.rb +129 -55
  41. data/lib/sidekiq/logging.rb +21 -3
  42. data/lib/sidekiq/manager.rb +83 -182
  43. data/lib/sidekiq/middleware/chain.rb +1 -0
  44. data/lib/sidekiq/middleware/i18n.rb +1 -0
  45. data/lib/sidekiq/middleware/server/active_record.rb +10 -0
  46. data/lib/sidekiq/paginator.rb +1 -0
  47. data/lib/sidekiq/processor.rb +221 -103
  48. data/lib/sidekiq/rails.rb +47 -27
  49. data/lib/sidekiq/redis_connection.rb +74 -7
  50. data/lib/sidekiq/scheduled.rb +87 -28
  51. data/lib/sidekiq/testing.rb +150 -19
  52. data/lib/sidekiq/testing/inline.rb +1 -0
  53. data/lib/sidekiq/util.rb +15 -17
  54. data/lib/sidekiq/version.rb +2 -1
  55. data/lib/sidekiq/web.rb +120 -184
  56. data/lib/sidekiq/web/action.rb +89 -0
  57. data/lib/sidekiq/web/application.rb +353 -0
  58. data/lib/sidekiq/{web_helpers.rb → web/helpers.rb} +123 -47
  59. data/lib/sidekiq/web/router.rb +100 -0
  60. data/lib/sidekiq/worker.rb +135 -18
  61. data/sidekiq.gemspec +8 -14
  62. data/web/assets/images/{status-sd8051fd480.png → status.png} +0 -0
  63. data/web/assets/javascripts/application.js +24 -20
  64. data/web/assets/javascripts/dashboard.js +33 -18
  65. data/web/assets/stylesheets/application-rtl.css +246 -0
  66. data/web/assets/stylesheets/application.css +401 -7
  67. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  68. data/web/assets/stylesheets/bootstrap.css +4 -8
  69. data/web/locales/ar.yml +81 -0
  70. data/web/locales/cs.yml +11 -1
  71. data/web/locales/de.yml +1 -1
  72. data/web/locales/en.yml +4 -0
  73. data/web/locales/es.yml +4 -3
  74. data/web/locales/fa.yml +80 -0
  75. data/web/locales/fr.yml +21 -12
  76. data/web/locales/he.yml +79 -0
  77. data/web/locales/ja.yml +24 -13
  78. data/web/locales/ru.yml +3 -0
  79. data/web/locales/ur.yml +80 -0
  80. data/web/views/_footer.erb +7 -9
  81. data/web/views/_job_info.erb +5 -1
  82. data/web/views/_nav.erb +5 -19
  83. data/web/views/_paging.erb +1 -1
  84. data/web/views/busy.erb +18 -9
  85. data/web/views/dashboard.erb +5 -5
  86. data/web/views/dead.erb +1 -1
  87. data/web/views/layout.erb +13 -5
  88. data/web/views/morgue.erb +16 -12
  89. data/web/views/queue.erb +12 -11
  90. data/web/views/queues.erb +5 -3
  91. data/web/views/retries.erb +19 -13
  92. data/web/views/retry.erb +2 -2
  93. data/web/views/scheduled.erb +4 -4
  94. data/web/views/scheduled_job_info.erb +1 -1
  95. metadata +45 -227
  96. data/lib/sidekiq/actor.rb +0 -39
  97. data/lib/sidekiq/middleware/server/logging.rb +0 -40
  98. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -206
  99. data/test/config.yml +0 -9
  100. data/test/env_based_config.yml +0 -11
  101. data/test/fake_env.rb +0 -0
  102. data/test/fixtures/en.yml +0 -2
  103. data/test/helper.rb +0 -49
  104. data/test/test_api.rb +0 -493
  105. data/test/test_cli.rb +0 -335
  106. data/test/test_client.rb +0 -194
  107. data/test/test_exception_handler.rb +0 -55
  108. data/test/test_extensions.rb +0 -126
  109. data/test/test_fetch.rb +0 -104
  110. data/test/test_logging.rb +0 -34
  111. data/test/test_manager.rb +0 -168
  112. data/test/test_middleware.rb +0 -159
  113. data/test/test_processor.rb +0 -237
  114. data/test/test_rails.rb +0 -21
  115. data/test/test_redis_connection.rb +0 -126
  116. data/test/test_retry.rb +0 -325
  117. data/test/test_scheduled.rb +0 -114
  118. data/test/test_scheduling.rb +0 -49
  119. data/test/test_sidekiq.rb +0 -99
  120. data/test/test_testing.rb +0 -142
  121. data/test/test_testing_fake.rb +0 -268
  122. data/test/test_testing_inline.rb +0 -93
  123. data/test/test_util.rb +0 -16
  124. data/test/test_web.rb +0 -608
  125. data/test/test_web_helpers.rb +0 -53
  126. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  127. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  128. data/web/assets/images/status/active.png +0 -0
  129. data/web/assets/images/status/idle.png +0 -0
  130. data/web/assets/javascripts/locales/README.md +0 -27
  131. data/web/assets/javascripts/locales/jquery.timeago.ar.js +0 -96
  132. data/web/assets/javascripts/locales/jquery.timeago.bg.js +0 -18
  133. data/web/assets/javascripts/locales/jquery.timeago.bs.js +0 -49
  134. data/web/assets/javascripts/locales/jquery.timeago.ca.js +0 -18
  135. data/web/assets/javascripts/locales/jquery.timeago.cs.js +0 -18
  136. data/web/assets/javascripts/locales/jquery.timeago.cy.js +0 -20
  137. data/web/assets/javascripts/locales/jquery.timeago.da.js +0 -18
  138. data/web/assets/javascripts/locales/jquery.timeago.de.js +0 -18
  139. data/web/assets/javascripts/locales/jquery.timeago.el.js +0 -18
  140. data/web/assets/javascripts/locales/jquery.timeago.en-short.js +0 -20
  141. data/web/assets/javascripts/locales/jquery.timeago.en.js +0 -20
  142. data/web/assets/javascripts/locales/jquery.timeago.es.js +0 -18
  143. data/web/assets/javascripts/locales/jquery.timeago.et.js +0 -18
  144. data/web/assets/javascripts/locales/jquery.timeago.fa.js +0 -22
  145. data/web/assets/javascripts/locales/jquery.timeago.fi.js +0 -28
  146. data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +0 -16
  147. data/web/assets/javascripts/locales/jquery.timeago.fr.js +0 -17
  148. data/web/assets/javascripts/locales/jquery.timeago.he.js +0 -18
  149. data/web/assets/javascripts/locales/jquery.timeago.hr.js +0 -49
  150. data/web/assets/javascripts/locales/jquery.timeago.hu.js +0 -18
  151. data/web/assets/javascripts/locales/jquery.timeago.hy.js +0 -18
  152. data/web/assets/javascripts/locales/jquery.timeago.id.js +0 -18
  153. data/web/assets/javascripts/locales/jquery.timeago.it.js +0 -16
  154. data/web/assets/javascripts/locales/jquery.timeago.ja.js +0 -19
  155. data/web/assets/javascripts/locales/jquery.timeago.ko.js +0 -17
  156. data/web/assets/javascripts/locales/jquery.timeago.lt.js +0 -20
  157. data/web/assets/javascripts/locales/jquery.timeago.mk.js +0 -20
  158. data/web/assets/javascripts/locales/jquery.timeago.nl.js +0 -20
  159. data/web/assets/javascripts/locales/jquery.timeago.no.js +0 -18
  160. data/web/assets/javascripts/locales/jquery.timeago.pl.js +0 -31
  161. data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +0 -16
  162. data/web/assets/javascripts/locales/jquery.timeago.pt.js +0 -16
  163. data/web/assets/javascripts/locales/jquery.timeago.ro.js +0 -18
  164. data/web/assets/javascripts/locales/jquery.timeago.rs.js +0 -49
  165. data/web/assets/javascripts/locales/jquery.timeago.ru.js +0 -34
  166. data/web/assets/javascripts/locales/jquery.timeago.sk.js +0 -18
  167. data/web/assets/javascripts/locales/jquery.timeago.sl.js +0 -44
  168. data/web/assets/javascripts/locales/jquery.timeago.sv.js +0 -18
  169. data/web/assets/javascripts/locales/jquery.timeago.th.js +0 -20
  170. data/web/assets/javascripts/locales/jquery.timeago.tr.js +0 -16
  171. data/web/assets/javascripts/locales/jquery.timeago.uk.js +0 -34
  172. data/web/assets/javascripts/locales/jquery.timeago.uz.js +0 -19
  173. data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +0 -20
  174. data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +0 -20
  175. data/web/views/_poll_js.erb +0 -5
@@ -1,99 +0,0 @@
1
- # encoding: utf-8
2
- require_relative 'helper'
3
-
4
- class TestSidekiq < Sidekiq::Test
5
- describe 'json processing' do
6
- it 'handles json' do
7
- assert_equal({"foo" => "bar"}, Sidekiq.load_json("{\"foo\":\"bar\"}"))
8
- assert_equal "{\"foo\":\"bar\"}", Sidekiq.dump_json({ "foo" => "bar" })
9
- end
10
- end
11
-
12
- describe "redis connection" do
13
- it "returns error without creating a connection if block is not given" do
14
- assert_raises(ArgumentError) do
15
- Sidekiq.redis
16
- end
17
- end
18
- end
19
-
20
- describe "❨╯°□°❩╯︵┻━┻" do
21
- before { $stdout = StringIO.new }
22
- after { $stdout = STDOUT }
23
-
24
- it "allows angry developers to express their emotional constitution and remedies it" do
25
- Sidekiq.❨╯°□°❩╯︵┻━┻
26
- assert_equal "Calm down, yo.\n", $stdout.string
27
- end
28
- end
29
-
30
- describe 'lifecycle events' do
31
- it 'handles invalid input' do
32
- Sidekiq.options[:lifecycle_events][:startup].clear
33
-
34
- e = assert_raises ArgumentError do
35
- Sidekiq.on(:startp)
36
- end
37
- assert_match(/Invalid event name/, e.message)
38
- e = assert_raises ArgumentError do
39
- Sidekiq.on('startup')
40
- end
41
- assert_match(/Symbols only/, e.message)
42
- Sidekiq.on(:startup) do
43
- 1 + 1
44
- end
45
-
46
- assert_equal 2, Sidekiq.options[:lifecycle_events][:startup].first.call
47
- end
48
- end
49
-
50
- describe 'default_worker_options' do
51
- it 'stringifies keys' do
52
- @old_options = Sidekiq.default_worker_options
53
- begin
54
- Sidekiq.default_worker_options = { queue: 'cat'}
55
- assert_equal 'cat', Sidekiq.default_worker_options['queue']
56
- ensure
57
- Sidekiq.default_worker_options = @old_options
58
- end
59
- end
60
- end
61
-
62
- describe 'error handling' do
63
- it 'deals with user-specified error handlers which raise errors' do
64
- output = capture_logging do
65
- begin
66
- Sidekiq.error_handlers << proc {|x, hash|
67
- raise 'boom'
68
- }
69
- cli = Sidekiq::CLI.new
70
- cli.handle_exception(RuntimeError.new("hello"))
71
- ensure
72
- Sidekiq.error_handlers.pop
73
- end
74
- end
75
- assert_includes output, "boom"
76
- assert_includes output, "ERROR"
77
- end
78
- end
79
-
80
- describe 'redis connection' do
81
- it 'does not continually retry' do
82
- assert_raises Redis::CommandError do
83
- Sidekiq.redis do |c|
84
- raise Redis::CommandError, "READONLY You can't write against a read only slave."
85
- end
86
- end
87
- end
88
-
89
- it 'reconnects if connection is flagged as readonly' do
90
- counts = []
91
- Sidekiq.redis do |c|
92
- counts << c.info['total_connections_received'].to_i
93
- raise Redis::CommandError, "READONLY You can't write against a read only slave." if counts.size == 1
94
- end
95
- assert_equal 2, counts.size
96
- assert_equal counts[0] + 1, counts[1]
97
- end
98
- end
99
- end
@@ -1,142 +0,0 @@
1
- require_relative 'helper'
2
-
3
- require 'active_record'
4
- require 'action_mailer'
5
- require 'sidekiq/rails'
6
- require 'sidekiq/extensions/action_mailer'
7
- require 'sidekiq/extensions/active_record'
8
-
9
- Sidekiq.hook_rails!
10
-
11
- class TestTesting < Sidekiq::Test
12
- describe 'sidekiq testing' do
13
- describe 'require/load sidekiq/testing.rb' do
14
- before do
15
- require 'sidekiq/testing'
16
- end
17
-
18
- after do
19
- Sidekiq::Testing.disable!
20
- end
21
-
22
- it 'enables fake testing' do
23
- Sidekiq::Testing.fake!
24
- assert Sidekiq::Testing.enabled?
25
- assert Sidekiq::Testing.fake?
26
- refute Sidekiq::Testing.inline?
27
- end
28
-
29
- it 'enables fake testing in a block' do
30
- Sidekiq::Testing.disable!
31
- assert Sidekiq::Testing.disabled?
32
- refute Sidekiq::Testing.fake?
33
-
34
- Sidekiq::Testing.fake! do
35
- assert Sidekiq::Testing.enabled?
36
- assert Sidekiq::Testing.fake?
37
- refute Sidekiq::Testing.inline?
38
- end
39
-
40
- refute Sidekiq::Testing.enabled?
41
- refute Sidekiq::Testing.fake?
42
- end
43
-
44
- it 'disables testing in a block' do
45
- Sidekiq::Testing.fake!
46
- assert Sidekiq::Testing.fake?
47
-
48
- Sidekiq::Testing.disable! do
49
- refute Sidekiq::Testing.fake?
50
- assert Sidekiq::Testing.disabled?
51
- end
52
-
53
- assert Sidekiq::Testing.fake?
54
- assert Sidekiq::Testing.enabled?
55
- end
56
- end
57
-
58
- describe 'require/load sidekiq/testing/inline.rb' do
59
- before do
60
- require 'sidekiq/testing/inline'
61
- end
62
-
63
- after do
64
- Sidekiq::Testing.disable!
65
- end
66
-
67
- it 'enables inline testing' do
68
- Sidekiq::Testing.inline!
69
- assert Sidekiq::Testing.enabled?
70
- assert Sidekiq::Testing.inline?
71
- refute Sidekiq::Testing.fake?
72
- end
73
-
74
- it 'enables inline testing in a block' do
75
- Sidekiq::Testing.disable!
76
- assert Sidekiq::Testing.disabled?
77
- refute Sidekiq::Testing.fake?
78
-
79
- Sidekiq::Testing.inline! do
80
- assert Sidekiq::Testing.enabled?
81
- assert Sidekiq::Testing.inline?
82
- end
83
-
84
- refute Sidekiq::Testing.enabled?
85
- refute Sidekiq::Testing.inline?
86
- refute Sidekiq::Testing.fake?
87
- end
88
- end
89
- end
90
-
91
- describe 'with middleware' do
92
- before do
93
- require 'sidekiq/testing'
94
- end
95
-
96
- after do
97
- Sidekiq::Testing.disable!
98
- end
99
-
100
- class AttributeWorker
101
- include Sidekiq::Worker
102
- class_attribute :count
103
- self.count = 0
104
- attr_accessor :foo
105
-
106
- def perform
107
- self.class.count += 1 if foo == :bar
108
- end
109
- end
110
-
111
- class AttributeMiddleware
112
- def call(worker, msg, queue)
113
- worker.foo = :bar if worker.respond_to?(:foo=)
114
- yield
115
- end
116
- end
117
-
118
- it 'wraps the inlined worker with middleware' do
119
- Sidekiq::Testing.server_middleware do |chain|
120
- chain.add AttributeMiddleware
121
- end
122
-
123
- begin
124
- Sidekiq::Testing.fake! do
125
- AttributeWorker.perform_async
126
- assert_equal 0, AttributeWorker.count
127
- end
128
-
129
- AttributeWorker.perform_one
130
- assert_equal 1, AttributeWorker.count
131
-
132
- Sidekiq::Testing.inline! do
133
- AttributeWorker.perform_async
134
- assert_equal 2, AttributeWorker.count
135
- end
136
- ensure
137
- Sidekiq::Testing.server_middleware.clear
138
- end
139
- end
140
- end
141
-
142
- end
@@ -1,268 +0,0 @@
1
- require_relative 'helper'
2
-
3
- require 'active_record'
4
- require 'action_mailer'
5
- require 'sidekiq/rails'
6
- require 'sidekiq/extensions/action_mailer'
7
- require 'sidekiq/extensions/active_record'
8
-
9
- Sidekiq.hook_rails!
10
-
11
- class TestTesting < Sidekiq::Test
12
- describe 'sidekiq testing' do
13
- class PerformError < RuntimeError; end
14
-
15
- class DirectWorker
16
- include Sidekiq::Worker
17
- def perform(a, b)
18
- a + b
19
- end
20
- end
21
-
22
- class EnqueuedWorker
23
- include Sidekiq::Worker
24
- def perform(a, b)
25
- a + b
26
- end
27
- end
28
-
29
- class StoredWorker
30
- include Sidekiq::Worker
31
- def perform(error)
32
- raise PerformError if error
33
- end
34
- end
35
-
36
- class FooMailer < ActionMailer::Base
37
- def bar(str)
38
- str
39
- end
40
- end
41
-
42
- class FooModel < ActiveRecord::Base
43
- def bar(str)
44
- str
45
- end
46
- end
47
-
48
- before do
49
- require 'sidekiq/testing'
50
- Sidekiq::Testing.fake!
51
- EnqueuedWorker.jobs.clear
52
- DirectWorker.jobs.clear
53
- end
54
-
55
- after do
56
- Sidekiq::Testing.disable!
57
- end
58
-
59
- it 'stubs the async call' do
60
- assert_equal 0, DirectWorker.jobs.size
61
- assert DirectWorker.perform_async(1, 2)
62
- assert_equal 1, DirectWorker.jobs.size
63
- assert DirectWorker.perform_in(10, 1, 2)
64
- assert_equal 2, DirectWorker.jobs.size
65
- assert DirectWorker.perform_at(10, 1, 2)
66
- assert_equal 3, DirectWorker.jobs.size
67
- assert_in_delta 10.seconds.from_now.to_f, DirectWorker.jobs.last['at'], 0.01
68
- end
69
-
70
- it 'stubs the delay call on mailers' do
71
- assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
72
- FooMailer.delay.bar('hello!')
73
- assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
74
- end
75
-
76
- class Something
77
- def self.foo(x)
78
- end
79
- end
80
-
81
- it 'stubs the delay call on models' do
82
- assert_equal 0, Sidekiq::Extensions::DelayedClass.jobs.size
83
- Something.delay.foo(Date.today)
84
- assert_equal 1, Sidekiq::Extensions::DelayedClass.jobs.size
85
- end
86
-
87
- it 'stubs the enqueue call' do
88
- assert_equal 0, EnqueuedWorker.jobs.size
89
- assert Sidekiq::Client.enqueue(EnqueuedWorker, 1, 2)
90
- assert_equal 1, EnqueuedWorker.jobs.size
91
- end
92
-
93
- it 'stubs the enqueue_to call' do
94
- assert_equal 0, EnqueuedWorker.jobs.size
95
- assert Sidekiq::Client.enqueue_to('someq', EnqueuedWorker, 1, 2)
96
- assert_equal 1, EnqueuedWorker.jobs.size
97
- end
98
-
99
- it 'executes all stored jobs' do
100
- assert StoredWorker.perform_async(false)
101
- assert StoredWorker.perform_async(true)
102
-
103
- assert_equal 2, StoredWorker.jobs.size
104
- assert_raises PerformError do
105
- StoredWorker.drain
106
- end
107
- assert_equal 0, StoredWorker.jobs.size
108
- end
109
-
110
- class SpecificJidWorker
111
- include Sidekiq::Worker
112
- class_attribute :count
113
- self.count = 0
114
- def perform(worker_jid)
115
- return unless worker_jid == self.jid
116
- self.class.count += 1
117
- end
118
- end
119
-
120
- it 'execute only jobs with assigned JID' do
121
- 4.times do |i|
122
- jid = SpecificJidWorker.perform_async(nil)
123
- if i % 2 == 0
124
- SpecificJidWorker.jobs[-1]["args"] = ["wrong_jid"]
125
- else
126
- SpecificJidWorker.jobs[-1]["args"] = [jid]
127
- end
128
- end
129
-
130
- SpecificJidWorker.perform_one
131
- assert_equal 0, SpecificJidWorker.count
132
-
133
- SpecificJidWorker.perform_one
134
- assert_equal 1, SpecificJidWorker.count
135
-
136
- SpecificJidWorker.drain
137
- assert_equal 2, SpecificJidWorker.count
138
- end
139
-
140
- it 'round trip serializes the job arguments' do
141
- assert StoredWorker.perform_async(:mike)
142
- job = StoredWorker.jobs.first
143
- assert_equal "mike", job['args'].first
144
- StoredWorker.clear
145
- end
146
-
147
- it 'perform_one runs only one job' do
148
- DirectWorker.perform_async(1, 2)
149
- DirectWorker.perform_async(3, 4)
150
- assert_equal 2, DirectWorker.jobs.size
151
-
152
- DirectWorker.perform_one
153
- assert_equal 1, DirectWorker.jobs.size
154
-
155
- DirectWorker.clear
156
- end
157
-
158
- it 'perform_one raise error upon empty queue' do
159
- DirectWorker.clear
160
- assert_raises Sidekiq::EmptyQueueError do
161
- DirectWorker.perform_one
162
- end
163
- end
164
-
165
- class FirstWorker
166
- include Sidekiq::Worker
167
- class_attribute :count
168
- self.count = 0
169
- def perform
170
- self.class.count += 1
171
- end
172
- end
173
-
174
- class SecondWorker
175
- include Sidekiq::Worker
176
- class_attribute :count
177
- self.count = 0
178
- def perform
179
- self.class.count += 1
180
- end
181
- end
182
-
183
- class ThirdWorker
184
- include Sidekiq::Worker
185
- class_attribute :count
186
- def perform
187
- FirstWorker.perform_async
188
- SecondWorker.perform_async
189
- end
190
- end
191
-
192
- it 'clears jobs across all workers' do
193
- Sidekiq::Worker.jobs.clear
194
- FirstWorker.count = 0
195
- SecondWorker.count = 0
196
-
197
- assert_equal 0, FirstWorker.jobs.size
198
- assert_equal 0, SecondWorker.jobs.size
199
-
200
- FirstWorker.perform_async
201
- SecondWorker.perform_async
202
-
203
- assert_equal 1, FirstWorker.jobs.size
204
- assert_equal 1, SecondWorker.jobs.size
205
-
206
- Sidekiq::Worker.clear_all
207
-
208
- assert_equal 0, FirstWorker.jobs.size
209
- assert_equal 0, SecondWorker.jobs.size
210
-
211
- assert_equal 0, FirstWorker.count
212
- assert_equal 0, SecondWorker.count
213
- end
214
-
215
- it 'drains jobs across all workers' do
216
- Sidekiq::Worker.jobs.clear
217
- FirstWorker.count = 0
218
- SecondWorker.count = 0
219
-
220
- assert_equal 0, FirstWorker.jobs.size
221
- assert_equal 0, SecondWorker.jobs.size
222
-
223
- assert_equal 0, FirstWorker.count
224
- assert_equal 0, SecondWorker.count
225
-
226
- FirstWorker.perform_async
227
- SecondWorker.perform_async
228
-
229
- assert_equal 1, FirstWorker.jobs.size
230
- assert_equal 1, SecondWorker.jobs.size
231
-
232
- Sidekiq::Worker.drain_all
233
-
234
- assert_equal 0, FirstWorker.jobs.size
235
- assert_equal 0, SecondWorker.jobs.size
236
-
237
- assert_equal 1, FirstWorker.count
238
- assert_equal 1, SecondWorker.count
239
- end
240
-
241
- it 'drains jobs across all workers even when workers create new jobs' do
242
- Sidekiq::Worker.jobs.clear
243
- FirstWorker.count = 0
244
- SecondWorker.count = 0
245
-
246
- assert_equal 0, ThirdWorker.jobs.size
247
-
248
- assert_equal 0, FirstWorker.count
249
- assert_equal 0, SecondWorker.count
250
-
251
- ThirdWorker.perform_async
252
-
253
- assert_equal 1, ThirdWorker.jobs.size
254
-
255
- Sidekiq::Worker.drain_all
256
-
257
- assert_equal 0, ThirdWorker.jobs.size
258
-
259
- assert_equal 1, FirstWorker.count
260
- assert_equal 1, SecondWorker.count
261
- end
262
-
263
- it 'can execute a job' do
264
- DirectWorker.execute_job(DirectWorker.new, [2, 3])
265
- end
266
-
267
- end
268
- end