kulesa-sidekiq 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/.gitignore +6 -0
  2. data/.rvmrc +4 -0
  3. data/COMM-LICENSE +83 -0
  4. data/Changes.md +207 -0
  5. data/Gemfile +12 -0
  6. data/LICENSE +22 -0
  7. data/README.md +61 -0
  8. data/Rakefile +9 -0
  9. data/bin/client +7 -0
  10. data/bin/sidekiq +14 -0
  11. data/bin/sidekiqctl +74 -0
  12. data/config.ru +18 -0
  13. data/examples/chef/cookbooks/sidekiq/README.rdoc +11 -0
  14. data/examples/chef/cookbooks/sidekiq/recipes/default.rb +55 -0
  15. data/examples/chef/cookbooks/sidekiq/templates/default/monitrc.conf.erb +8 -0
  16. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.erb +219 -0
  17. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.yml.erb +22 -0
  18. data/examples/clockwork.rb +44 -0
  19. data/examples/config.yml +10 -0
  20. data/examples/monitrc.conf +6 -0
  21. data/examples/por.rb +27 -0
  22. data/examples/scheduling.rb +37 -0
  23. data/examples/sinkiq.rb +59 -0
  24. data/examples/web-ui.png +0 -0
  25. data/lib/sidekiq.rb +98 -0
  26. data/lib/sidekiq/capistrano.rb +35 -0
  27. data/lib/sidekiq/cli.rb +214 -0
  28. data/lib/sidekiq/client.rb +72 -0
  29. data/lib/sidekiq/extensions/action_mailer.rb +26 -0
  30. data/lib/sidekiq/extensions/active_record.rb +27 -0
  31. data/lib/sidekiq/extensions/generic_proxy.rb +21 -0
  32. data/lib/sidekiq/fetch.rb +76 -0
  33. data/lib/sidekiq/logging.rb +46 -0
  34. data/lib/sidekiq/manager.rb +163 -0
  35. data/lib/sidekiq/middleware/chain.rb +96 -0
  36. data/lib/sidekiq/middleware/client/unique_jobs.rb +36 -0
  37. data/lib/sidekiq/middleware/server/active_record.rb +13 -0
  38. data/lib/sidekiq/middleware/server/exception_handler.rb +38 -0
  39. data/lib/sidekiq/middleware/server/failure_jobs.rb +25 -0
  40. data/lib/sidekiq/middleware/server/logging.rb +31 -0
  41. data/lib/sidekiq/middleware/server/retry_jobs.rb +69 -0
  42. data/lib/sidekiq/middleware/server/timeout.rb +21 -0
  43. data/lib/sidekiq/middleware/server/unique_jobs.rb +17 -0
  44. data/lib/sidekiq/processor.rb +92 -0
  45. data/lib/sidekiq/rails.rb +21 -0
  46. data/lib/sidekiq/redis_connection.rb +27 -0
  47. data/lib/sidekiq/retry.rb +59 -0
  48. data/lib/sidekiq/testing.rb +44 -0
  49. data/lib/sidekiq/testing/inline.rb +37 -0
  50. data/lib/sidekiq/util.rb +40 -0
  51. data/lib/sidekiq/version.rb +3 -0
  52. data/lib/sidekiq/web.rb +185 -0
  53. data/lib/sidekiq/worker.rb +62 -0
  54. data/lib/sidekiq/yaml_patch.rb +21 -0
  55. data/myapp/.gitignore +15 -0
  56. data/myapp/Capfile +5 -0
  57. data/myapp/Gemfile +19 -0
  58. data/myapp/Rakefile +7 -0
  59. data/myapp/app/controllers/application_controller.rb +3 -0
  60. data/myapp/app/controllers/work_controller.rb +38 -0
  61. data/myapp/app/helpers/application_helper.rb +2 -0
  62. data/myapp/app/mailers/.gitkeep +0 -0
  63. data/myapp/app/mailers/user_mailer.rb +9 -0
  64. data/myapp/app/models/.gitkeep +0 -0
  65. data/myapp/app/models/post.rb +5 -0
  66. data/myapp/app/views/layouts/application.html.erb +14 -0
  67. data/myapp/app/views/user_mailer/greetings.html.erb +3 -0
  68. data/myapp/app/views/work/index.html.erb +1 -0
  69. data/myapp/app/workers/hard_worker.rb +10 -0
  70. data/myapp/config.ru +4 -0
  71. data/myapp/config/application.rb +59 -0
  72. data/myapp/config/boot.rb +6 -0
  73. data/myapp/config/database.yml +25 -0
  74. data/myapp/config/deploy.rb +15 -0
  75. data/myapp/config/environment.rb +5 -0
  76. data/myapp/config/environments/development.rb +38 -0
  77. data/myapp/config/environments/production.rb +67 -0
  78. data/myapp/config/environments/test.rb +37 -0
  79. data/myapp/config/initializers/backtrace_silencers.rb +7 -0
  80. data/myapp/config/initializers/inflections.rb +15 -0
  81. data/myapp/config/initializers/mime_types.rb +5 -0
  82. data/myapp/config/initializers/secret_token.rb +7 -0
  83. data/myapp/config/initializers/session_store.rb +8 -0
  84. data/myapp/config/initializers/sidekiq.rb +6 -0
  85. data/myapp/config/initializers/wrap_parameters.rb +14 -0
  86. data/myapp/config/locales/en.yml +5 -0
  87. data/myapp/config/routes.rb +10 -0
  88. data/myapp/db/migrate/20120123214055_create_posts.rb +10 -0
  89. data/myapp/db/seeds.rb +7 -0
  90. data/myapp/lib/assets/.gitkeep +0 -0
  91. data/myapp/lib/tasks/.gitkeep +0 -0
  92. data/myapp/log/.gitkeep +0 -0
  93. data/myapp/script/rails +6 -0
  94. data/sidekiq.gemspec +27 -0
  95. data/test/config.yml +9 -0
  96. data/test/fake_env.rb +0 -0
  97. data/test/helper.rb +16 -0
  98. data/test/test_cli.rb +168 -0
  99. data/test/test_client.rb +119 -0
  100. data/test/test_extensions.rb +69 -0
  101. data/test/test_manager.rb +51 -0
  102. data/test/test_middleware.rb +92 -0
  103. data/test/test_processor.rb +32 -0
  104. data/test/test_retry.rb +125 -0
  105. data/test/test_stats.rb +68 -0
  106. data/test/test_testing.rb +97 -0
  107. data/test/test_testing_inline.rb +75 -0
  108. data/test/test_web.rb +122 -0
  109. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  110. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  111. data/web/assets/javascripts/application.js +20 -0
  112. data/web/assets/javascripts/vendor/bootstrap.js +12 -0
  113. data/web/assets/javascripts/vendor/bootstrap/bootstrap-alert.js +91 -0
  114. data/web/assets/javascripts/vendor/bootstrap/bootstrap-button.js +98 -0
  115. data/web/assets/javascripts/vendor/bootstrap/bootstrap-carousel.js +154 -0
  116. data/web/assets/javascripts/vendor/bootstrap/bootstrap-collapse.js +136 -0
  117. data/web/assets/javascripts/vendor/bootstrap/bootstrap-dropdown.js +92 -0
  118. data/web/assets/javascripts/vendor/bootstrap/bootstrap-modal.js +210 -0
  119. data/web/assets/javascripts/vendor/bootstrap/bootstrap-popover.js +95 -0
  120. data/web/assets/javascripts/vendor/bootstrap/bootstrap-scrollspy.js +125 -0
  121. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tab.js +130 -0
  122. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tooltip.js +270 -0
  123. data/web/assets/javascripts/vendor/bootstrap/bootstrap-transition.js +51 -0
  124. data/web/assets/javascripts/vendor/bootstrap/bootstrap-typeahead.js +271 -0
  125. data/web/assets/javascripts/vendor/jquery.js +9266 -0
  126. data/web/assets/javascripts/vendor/jquery.timeago.js +148 -0
  127. data/web/assets/stylesheets/application.css +27 -0
  128. data/web/assets/stylesheets/vendor/bootstrap-responsive.css +567 -0
  129. data/web/assets/stylesheets/vendor/bootstrap.css +3365 -0
  130. data/web/views/index.slim +48 -0
  131. data/web/views/layout.slim +26 -0
  132. data/web/views/queue.slim +11 -0
  133. data/web/views/retries.slim +29 -0
  134. data/web/views/retry.slim +52 -0
  135. metadata +371 -0
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
@@ -0,0 +1,10 @@
1
+ require 'sidekiq/web'
2
+
3
+ Myapp::Application.routes.draw do
4
+ mount Sidekiq::Web => '/sidekiq'
5
+ get "work" => "work#index"
6
+ get "work/email" => "work#email"
7
+ get "work/post" => "work#delayed_post"
8
+ get "work/long" => "work#long"
9
+ get "work/crash" => "work#crash"
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreatePosts < ActiveRecord::Migration
2
+ def change
3
+ create_table :posts do |t|
4
+ t.string :title
5
+ t.string :body
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # This file should contain all the record creation needed to seed the database with its default values.
2
+ # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3
+ #
4
+ # Examples:
5
+ #
6
+ # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
7
+ # Mayor.create(name: 'Emanuel', city: cities.first)
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/sidekiq/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Mike Perham"]
6
+ gem.email = ["mperham@gmail.com"]
7
+ gem.description = gem.summary = "Simple, efficient message processing for Ruby"
8
+ gem.homepage = "http://mperham.github.com/sidekiq"
9
+
10
+ gem.executables = ['sidekiq', 'sidekiqctl']
11
+ gem.files = `git ls-files`.split("\n")
12
+ gem.test_files = `git ls-files -- test/*`.split("\n")
13
+ gem.name = "kulesa-sidekiq"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = Sidekiq::VERSION
16
+ gem.add_dependency 'redis'
17
+ gem.add_dependency 'redis-namespace'
18
+ gem.add_dependency 'connection_pool', '~> 0.9.0'
19
+ gem.add_dependency 'kulesa-celluloid'
20
+ gem.add_dependency 'multi_json', '~> 1'
21
+ gem.add_development_dependency 'minitest'
22
+ gem.add_development_dependency 'sinatra'
23
+ gem.add_development_dependency 'slim'
24
+ gem.add_development_dependency 'rake'
25
+ gem.add_development_dependency 'actionmailer', '~> 3'
26
+ gem.add_development_dependency 'activerecord', '~> 3'
27
+ end
@@ -0,0 +1,9 @@
1
+ ---
2
+ :verbose: false
3
+ :environment: xzibit
4
+ :require: ./test/fake_env.rb
5
+ :pidfile: /tmp/sidekiq-config-test.pid
6
+ :concurrency: 50
7
+ :queues:
8
+ - [often, 2]
9
+ - [seldom, 1]
File without changes
@@ -0,0 +1,16 @@
1
+ ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
2
+ if ENV.has_key?("SIMPLECOV")
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+ end
6
+
7
+ require 'minitest/unit'
8
+ require 'minitest/pride'
9
+ require 'minitest/autorun'
10
+
11
+ require 'sidekiq'
12
+ require 'sidekiq/util'
13
+ Sidekiq.logger.level = Logger::ERROR
14
+
15
+ require 'sidekiq/redis_connection'
16
+ REDIS = Sidekiq::RedisConnection.create(:url => "redis://localhost/15", :namespace => 'testy')
@@ -0,0 +1,168 @@
1
+ require 'helper'
2
+ require 'sidekiq/cli'
3
+ require 'tempfile'
4
+
5
+ cli = Sidekiq::CLI.instance
6
+ def cli.die(code)
7
+ @code = code
8
+ end
9
+
10
+ def cli.valid?
11
+ !@code
12
+ end
13
+
14
+ class TestCli < MiniTest::Unit::TestCase
15
+ describe 'with cli' do
16
+
17
+ before do
18
+ @cli = Sidekiq::CLI.instance
19
+ end
20
+
21
+ it 'blows up with an invalid require' do
22
+ assert_raises ArgumentError do
23
+ @cli.parse(['sidekiq', '-r', 'foobar'])
24
+ end
25
+ end
26
+
27
+ it 'requires the specified Ruby code' do
28
+ @cli.parse(['sidekiq', '-r', './test/fake_env.rb'])
29
+ assert($LOADED_FEATURES.any? { |x| x =~ /fake_env/ })
30
+ assert @cli.valid?
31
+ end
32
+
33
+ it 'changes concurrency' do
34
+ @cli.parse(['sidekiq', '-c', '60', '-r', './test/fake_env.rb'])
35
+ assert_equal 60, Sidekiq.options[:concurrency]
36
+ end
37
+
38
+ it 'changes queues' do
39
+ @cli.parse(['sidekiq', '-q', 'foo', '-r', './test/fake_env.rb'])
40
+ assert_equal ['foo'], Sidekiq.options[:queues]
41
+ end
42
+
43
+ it 'changes timeout' do
44
+ @cli.parse(['sidekiq', '-t', '30', '-r', './test/fake_env.rb'])
45
+ assert_equal 30, Sidekiq.options[:timeout]
46
+ end
47
+
48
+ it 'handles multiple queues with weights' do
49
+ @cli.parse(['sidekiq', '-q', 'foo,3', '-q', 'bar', '-r', './test/fake_env.rb'])
50
+ assert_equal %w(bar foo foo foo), Sidekiq.options[:queues].sort
51
+ end
52
+
53
+ it 'sets verbose' do
54
+ old = Sidekiq.logger.level
55
+ @cli.parse(['sidekiq', '-v', '-r', './test/fake_env.rb'])
56
+ assert_equal Logger::DEBUG, Sidekiq.logger.level
57
+ # If we leave the logger at DEBUG it'll add a lot of noise to the test output
58
+ Sidekiq.logger.level = old
59
+ end
60
+
61
+ describe 'with pidfile' do
62
+ before do
63
+ @tmp_file = Tempfile.new('sidekiq-test')
64
+ @tmp_path = @tmp_file.path
65
+ @tmp_file.close!
66
+
67
+ @cli.parse(['sidekiq', '-P', @tmp_path, '-r', './test/fake_env.rb'])
68
+ end
69
+
70
+ after do
71
+ File.unlink @tmp_path if File.exist? @tmp_path
72
+ end
73
+
74
+ it 'sets pidfile path' do
75
+ assert_equal @tmp_path, Sidekiq.options[:pidfile]
76
+ end
77
+
78
+ it 'writes pidfile' do
79
+ assert_equal File.read(@tmp_path).strip.to_i, Process.pid
80
+ end
81
+ end
82
+
83
+ describe 'with config file' do
84
+ before do
85
+ @cli.parse(['sidekiq', '-C', './test/config.yml'])
86
+ end
87
+
88
+ it 'takes a path' do
89
+ assert_equal './test/config.yml', Sidekiq.options[:config_file]
90
+ end
91
+
92
+ it 'sets verbose' do
93
+ refute Sidekiq.options[:verbose]
94
+ end
95
+
96
+ it 'sets require file' do
97
+ assert_equal './test/fake_env.rb', Sidekiq.options[:require]
98
+ end
99
+
100
+ it 'sets environment' do
101
+ assert_equal 'xzibit', Sidekiq.options[:environment]
102
+ end
103
+
104
+ it 'sets concurrency' do
105
+ assert_equal 50, Sidekiq.options[:concurrency]
106
+ end
107
+
108
+ it 'sets pid file' do
109
+ assert_equal '/tmp/sidekiq-config-test.pid', Sidekiq.options[:pidfile]
110
+ end
111
+
112
+ it 'sets queues' do
113
+ assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'often' }
114
+ assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }
115
+ end
116
+ end
117
+
118
+ describe 'with config file and flags' do
119
+ before do
120
+ # We need an actual file here.
121
+ @tmp_lib_path = '/tmp/require-me.rb'
122
+ File.open(@tmp_lib_path, 'w') do |f|
123
+ f.puts "# do work"
124
+ end
125
+
126
+ @tmp_file = Tempfile.new('sidekiqr')
127
+ @tmp_path = @tmp_file.path
128
+ @tmp_file.close!
129
+
130
+ @cli.parse(['sidekiq',
131
+ '-C', './test/config.yml',
132
+ '-e', 'snoop',
133
+ '-c', '100',
134
+ '-r', @tmp_lib_path,
135
+ '-P', @tmp_path,
136
+ '-q', 'often,7',
137
+ '-q', 'seldom,3'])
138
+ end
139
+
140
+ after do
141
+ File.unlink @tmp_lib_path if File.exist? @tmp_lib_path
142
+ File.unlink @tmp_path if File.exist? @tmp_path
143
+ end
144
+
145
+ it 'uses concurrency flag' do
146
+ assert_equal 100, Sidekiq.options[:concurrency]
147
+ end
148
+
149
+ it 'uses require file flag' do
150
+ assert_equal @tmp_lib_path, Sidekiq.options[:require]
151
+ end
152
+
153
+ it 'uses environment flag' do
154
+ assert_equal 'snoop', Sidekiq.options[:environment]
155
+ end
156
+
157
+ it 'uses pidfile flag' do
158
+ assert_equal @tmp_path, Sidekiq.options[:pidfile]
159
+ end
160
+
161
+ it 'sets queues' do
162
+ assert_equal 7, Sidekiq.options[:queues].count { |q| q == 'often' }
163
+ assert_equal 3, Sidekiq.options[:queues].count { |q| q == 'seldom' }
164
+ end
165
+ end
166
+ end
167
+
168
+ end
@@ -0,0 +1,119 @@
1
+ require 'helper'
2
+ require 'sidekiq/client'
3
+ require 'sidekiq/worker'
4
+
5
+ class TestClient < MiniTest::Unit::TestCase
6
+ describe 'with real redis' do
7
+ before do
8
+ Sidekiq.redis = REDIS
9
+ Sidekiq.redis {|c| c.flushdb }
10
+ end
11
+
12
+ class QueueWorker
13
+ include Sidekiq::Worker
14
+ sidekiq_options :queue => 'customqueue'
15
+ end
16
+
17
+ it 'does not push duplicate messages when configured for unique only' do
18
+ Sidekiq.client_middleware do |chain|
19
+ chain.add Sidekiq::Middleware::Client::UniqueJobs
20
+ end
21
+ QueueWorker.sidekiq_options :unique => true
22
+ 10.times { Sidekiq::Client.push('class' => QueueWorker, 'args' => [1, 2]) }
23
+ assert_equal 1, Sidekiq.redis {|c| c.llen("queue:customqueue") }
24
+ end
25
+
26
+ it 'does push duplicate messages when not configured for unique only' do
27
+ Sidekiq.client_middleware do |chain|
28
+ chain.add Sidekiq::Middleware::Client::UniqueJobs
29
+ end
30
+ QueueWorker.sidekiq_options :unique => false
31
+ 10.times { Sidekiq::Client.push('class' => QueueWorker, 'args' => [1, 2]) }
32
+ assert_equal 10, Sidekiq.redis {|c| c.llen("queue:customqueue") }
33
+ end
34
+ end
35
+
36
+ describe 'with mock redis' do
37
+ before do
38
+ @redis = MiniTest::Mock.new
39
+ def @redis.multi; [yield] * 2 if block_given?; end
40
+ def @redis.set(*); true; end
41
+ def @redis.sadd(*); true; end
42
+ def @redis.srem(*); true; end
43
+ def @redis.get(*); nil; end
44
+ def @redis.del(*); nil; end
45
+ def @redis.incrby(*); nil; end
46
+ def @redis.setex(*); true; end
47
+ def @redis.expire(*); true; end
48
+ def @redis.watch(*); true; end
49
+ def @redis.with_connection; yield self; end
50
+ def @redis.with; yield self; end
51
+ def @redis.exec; true; end
52
+ Sidekiq.instance_variable_set(:@redis, @redis)
53
+ end
54
+
55
+ it 'raises ArgumentError with invalid params' do
56
+ assert_raises ArgumentError do
57
+ Sidekiq::Client.push('foo', 1)
58
+ end
59
+
60
+ assert_raises ArgumentError do
61
+ Sidekiq::Client.push('foo', :class => 'Foo', :noargs => [1, 2])
62
+ end
63
+ end
64
+
65
+ it 'pushes messages to redis' do
66
+ @redis.expect :rpush, 1, ['queue:foo', String]
67
+ pushed = Sidekiq::Client.push('queue' => 'foo', 'class' => MyWorker, 'args' => [1, 2])
68
+ assert pushed
69
+ @redis.verify
70
+ end
71
+
72
+ class MyWorker
73
+ include Sidekiq::Worker
74
+ end
75
+
76
+ it 'handles perform_async' do
77
+ @redis.expect :rpush, 1, ['queue:default', String]
78
+ pushed = MyWorker.perform_async(1, 2)
79
+ assert pushed
80
+ @redis.verify
81
+ end
82
+
83
+ it 'handles perform_async on failure' do
84
+ @redis.expect :rpush, nil, ['queue:default', String]
85
+ pushed = MyWorker.perform_async(1, 2)
86
+ refute pushed
87
+ @redis.verify
88
+ end
89
+
90
+ it 'enqueues messages to redis' do
91
+ @redis.expect :rpush, 1, ['queue:default', String]
92
+ pushed = Sidekiq::Client.enqueue(MyWorker, 1, 2)
93
+ assert pushed
94
+ @redis.verify
95
+ end
96
+
97
+ class QueuedWorker
98
+ include Sidekiq::Worker
99
+ sidekiq_options :queue => :flimflam, :timeout => 1
100
+ end
101
+
102
+ it 'enqueues to the named queue' do
103
+ @redis.expect :rpush, 1, ['queue:flimflam', String]
104
+ pushed = QueuedWorker.perform_async(1, 2)
105
+ assert pushed
106
+ @redis.verify
107
+ end
108
+
109
+ it 'retrieves queues' do
110
+ @redis.expect :smembers, ['bob'], ['queues']
111
+ assert_equal ['bob'], Sidekiq::Client.registered_queues
112
+ end
113
+
114
+ it 'retrieves workers' do
115
+ @redis.expect :smembers, ['bob'], ['workers']
116
+ assert_equal ['bob'], Sidekiq::Client.registered_workers
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,69 @@
1
+ require 'helper'
2
+ require 'sidekiq'
3
+ require 'active_record'
4
+ require 'action_mailer'
5
+ require 'sidekiq/extensions/action_mailer'
6
+ require 'sidekiq/extensions/active_record'
7
+ require 'sidekiq/rails'
8
+
9
+ Sidekiq.hook_rails!
10
+
11
+ class TestExtensions < MiniTest::Unit::TestCase
12
+ describe 'sidekiq extensions' do
13
+ before do
14
+ Sidekiq.redis = REDIS
15
+ Sidekiq.redis {|c| c.flushdb }
16
+ end
17
+
18
+ class MyModel < ActiveRecord::Base
19
+ def self.long_class_method
20
+ raise "Should not be called!"
21
+ end
22
+ end
23
+
24
+ it 'allows delayed execution of ActiveRecord class methods' do
25
+ assert_equal [], Sidekiq::Client.registered_queues
26
+ assert_equal 0, Sidekiq.redis {|c| c.llen('queue:default') }
27
+ MyModel.delay.long_class_method
28
+ assert_equal ['default'], Sidekiq::Client.registered_queues
29
+ assert_equal 1, Sidekiq.redis {|c| c.llen('queue:default') }
30
+ end
31
+
32
+ class UserMailer < ActionMailer::Base
33
+ def greetings(a, b)
34
+ raise "Should not be called!"
35
+ end
36
+ end
37
+
38
+ it 'allows delayed delivery of ActionMailer mails' do
39
+ assert_equal [], Sidekiq::Client.registered_queues
40
+ assert_equal 0, Sidekiq.redis {|c| c.llen('queue:default') }
41
+ UserMailer.delay.greetings(1, 2)
42
+ assert_equal ['default'], Sidekiq::Client.registered_queues
43
+ assert_equal 1, Sidekiq.redis {|c| c.llen('queue:default') }
44
+ end
45
+ end
46
+
47
+ describe 'sidekiq rails extensions configuration' do
48
+ before do
49
+ @options = Sidekiq.options
50
+ end
51
+
52
+ after do
53
+ Sidekiq.options = @options
54
+ end
55
+
56
+ it 'should set enable_rails_extensions option to true by default' do
57
+ assert Sidekiq.options[:enable_rails_extensions]
58
+ end
59
+
60
+ it 'should extend ActiveRecord and ActiveMailer if enable_rails_extensions is true' do
61
+ assert Sidekiq.hook_rails!
62
+ end
63
+
64
+ it 'should not extend ActiveRecord and ActiveMailer if enable_rails_extensions is false' do
65
+ Sidekiq.options = { :enable_rails_extensions => false }
66
+ refute Sidekiq.hook_rails!
67
+ end
68
+ end
69
+ end