1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Concerted effort to increase test coverage: 86 -> 88%

This commit is contained in:
Mike Perham 2014-02-01 15:04:20 -08:00
parent 9aef2967ce
commit 9867b728c4
7 changed files with 109 additions and 4 deletions

View file

@ -7,3 +7,5 @@ platforms :rbx do
gem 'minitest' # if using minitest
gem 'rubinius-developer_tools' # if using any of coverage, debugger, profiler
end
gem 'sqlite3'

View file

@ -1,7 +1,35 @@
module Sidekiq
module Actor
module ClassMethods
def trap_exit(*args)
end
def new_link(*args)
new(*args)
end
end
module InstanceMethods
def current_actor
self
end
def after(interval)
end
def alive?
!@dead
end
def terminate
@dead = true
end
end
def self.included(klass)
klass.send(:include, Celluloid)
if $TESTING
klass.send(:include, InstanceMethods)
klass.send(:extend, ClassMethods)
else
klass.send(:include, Celluloid)
end
end
end
end

View file

@ -12,6 +12,8 @@ module Sidekiq
TIMEOUT = 1
attr_reader :down
def initialize(mgr, options)
@down = nil
@mgr = mgr
@ -47,6 +49,12 @@ module Sidekiq
end
end
private
def pause
sleep(TIMEOUT)
end
def handle_fetch_exception(ex)
if !@down
logger.error("Error fetching message: #{ex}")
@ -55,7 +63,7 @@ module Sidekiq
end
end
@down ||= Time.now
sleep(TIMEOUT)
pause
after(0) { fetch }
rescue Task::TerminatedError
# If redis is down when we try to shut down, all the fetch backlog
@ -69,6 +77,10 @@ module Sidekiq
@done = true
end
def self.reset # testing only
@done = nil
end
def self.done?
@done
end

View file

@ -22,7 +22,6 @@ Gem::Specification.new do |gem|
gem.add_development_dependency 'sinatra'
gem.add_development_dependency 'minitest', '~> 4.2'
gem.add_development_dependency 'rake'
gem.add_development_dependency 'actionmailer', '>= 4.0.0'
gem.add_development_dependency 'activerecord', '>= 4.0.0'
gem.add_development_dependency 'rails', '>= 4.0.0'
gem.add_development_dependency 'coveralls'
end

View file

@ -2,6 +2,7 @@ $TESTING = true
require 'coveralls'
Coveralls.wear! do
add_filter "/test/"
add_filter "/myapp/"
end
ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
@ -9,6 +10,7 @@ if ENV.has_key?("SIMPLECOV")
require 'simplecov'
SimpleCov.start do
add_filter "/test/"
add_filter "/myapp/"
end
end

View file

@ -30,6 +30,12 @@ class TestCli < Sidekiq::Test
assert @cli.valid?
end
it 'boots rails' do
refute defined?(::Rails)
@cli.parse(['sidekiq', '-r', './myapp'])
assert defined?(::Rails)
end
it 'changes concurrency' do
@cli.parse(['sidekiq', '-c', '60', '-r', './test/fake_env.rb'])
assert_equal 60, Sidekiq.options[:concurrency]

View file

@ -40,5 +40,61 @@ class TestFetcher < Sidekiq::Test
assert_equal 2, q1.size
assert_equal 1, q2.size
end
describe 'fetching' do
before do
Sidekiq::Fetcher.reset
end
it 'instantiates' do
begin
Sidekiq.options[:fetch] = NullFetch
mgr = Minitest::Mock.new
fetch = Sidekiq::Fetcher.new(mgr, {})
fetch.fetch
Sidekiq::Fetcher.done!
ensure
Sidekiq.options[:fetch] = Sidekiq::BasicFetch
end
end
class NullFetch
def initialize(opts)
end
def retrieve_work
end
def self.bulk_requeue(*args)
end
end
it 'handles redis network errors' do
begin
Sidekiq.logger.level = Logger::FATAL
Sidekiq.options[:fetch] = ErrorFetch
mgr = Minitest::Mock.new
fetch = Sidekiq::Fetcher.new(mgr, {})
def fetch.pause
end
refute fetch.down
fetch.fetch
Sidekiq::Fetcher.done!
assert fetch.down
ensure
Sidekiq.options[:fetch] = Sidekiq::BasicFetch
Sidekiq.logger.level = Logger::ERROR
end
end
class ErrorFetch
def initialize(opts)
end
def retrieve_work
raise IOError, "ker-BOOM"
end
def self.bulk_requeue(*args)
end
end
end
end
end