kulesa-sidekiq 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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