1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00
mperham--sidekiq/test/test_middleware.rb
Mike Perham a1f78816a7 Implement generic Ruby support via simple require flag
Various cleanups
It's "assert_equal(expected, actual)"
2012-02-09 20:32:59 -08:00

79 lines
1.9 KiB
Ruby

require 'helper'
require 'sidekiq/middleware/chain'
require 'sidekiq/middleware/server/unique_jobs'
require 'sidekiq/processor'
class TestMiddleware < MiniTest::Unit::TestCase
describe 'middleware chain' do
before do
@boss = MiniTest::Mock.new
Celluloid.logger = nil
end
class CustomMiddleware
def initialize(name, recorder)
@name = name
@recorder = recorder
end
def call(worker, msg)
@recorder << [@name, 'before']
yield
@recorder << [@name, 'after']
end
end
it 'supports custom middleware' do
chain = Sidekiq::Middleware::Chain.new
chain.register do
use CustomMiddleware, 1, []
end
assert_equal CustomMiddleware, chain.entries.last.klass
end
class CustomWorker
def perform(recorder)
recorder << ['work_performed']
end
end
class NonYieldingMiddleware
def call(*args)
end
end
it 'executes middleware in the proper order' do
Sidekiq::Middleware::Server::UniqueJobs.class_eval do
def call(worker, msg); yield; end
end
recorder = []
msg = { 'class' => CustomWorker.to_s, 'args' => [recorder] }
Sidekiq::Processor.middleware.register do
2.times { |i| use CustomMiddleware, i.to_s, recorder }
end
processor = Sidekiq::Processor.new(@boss)
@boss.expect(:processor_done!, nil, [processor])
processor.process(msg)
assert_equal %w(0 before 1 before work_performed 1 after 0 after), recorder.flatten
end
it 'allows middleware to abruptly stop processing rest of chain' do
recorder = []
chain = Sidekiq::Middleware::Chain.new
chain.register do
use NonYieldingMiddleware
use CustomMiddleware, 1, recorder
end
final_action = nil
chain.invoke { final_action = true }
assert_equal nil, final_action
assert_equal [], recorder
end
end
end