Fix tests: should acquire queues in a separate thread

This commit is contained in:
Alexey Chernenkov 2018-12-21 14:44:22 +05:00
parent 66e7102bcd
commit d051077d75
2 changed files with 24 additions and 13 deletions

View File

@ -15,61 +15,72 @@ RSpec.describe Sidekiq::LimitFetch::Queues do
before { subject.start options }
def in_thread(&block)
thr = Thread.new(&block)
thr.join
end
it 'should acquire queues' do
subject.acquire
in_thread { subject.acquire }
expect(Sidekiq::Queue['queue1'].probed).to eq 1
expect(Sidekiq::Queue['queue2'].probed).to eq 1
end
it 'should acquire dynamically blocking queues' do
subject.acquire
in_thread { subject.acquire }
expect(Sidekiq::Queue['queue1'].probed).to eq 1
expect(Sidekiq::Queue['queue2'].probed).to eq 1
Sidekiq::Queue['queue1'].block
subject.acquire
in_thread { subject.acquire }
expect(Sidekiq::Queue['queue1'].probed).to eq 2
expect(Sidekiq::Queue['queue2'].probed).to eq 1
end
it 'should block except given queues' do
Sidekiq::Queue['queue1'].block_except 'queue2'
subject.acquire
in_thread { subject.acquire }
expect(Sidekiq::Queue['queue1'].probed).to eq 1
expect(Sidekiq::Queue['queue2'].probed).to eq 1
Sidekiq::Queue['queue1'].block_except 'queue404'
subject.acquire
in_thread { subject.acquire }
expect(Sidekiq::Queue['queue1'].probed).to eq 2
expect(Sidekiq::Queue['queue2'].probed).to eq 1
end
it 'should release queues' do
subject.acquire
subject.release_except nil
in_thread {
subject.acquire
subject.release_except nil
}
expect(Sidekiq::Queue['queue1'].probed).to eq 0
expect(Sidekiq::Queue['queue2'].probed).to eq 0
end
it 'should release queues except selected' do
subject.acquire
subject.release_except 'queue:queue1'
in_thread {
subject.acquire
subject.release_except 'queue:queue1'
}
expect(Sidekiq::Queue['queue1'].probed).to eq 1
expect(Sidekiq::Queue['queue2'].probed).to eq 0
end
it 'should release when no queues was acquired' do
queues.each {|name| Sidekiq::Queue[name].pause }
subject.acquire
expect { subject.release_except nil }.not_to raise_exception
in_thread {
subject.acquire
expect { subject.release_except nil }.not_to raise_exception
}
end
context 'blocking' do
let(:blocking) { %w(queue1) }
it 'should acquire blocking queues' do
3.times { subject.acquire }
3.times { in_thread { subject.acquire } }
expect(Sidekiq::Queue['queue1'].probed).to eq 3
expect(Sidekiq::Queue['queue2'].probed).to eq 1
end

View File

@ -6,7 +6,7 @@ RSpec.describe Sidekiq::LimitFetch do
let(:limits) {{ 'queue1' => 1, 'queue2' => 2 }}
before do
subject::Queues.start options
subject::Queues.start options
Sidekiq.redis do |it|
it.del 'queue:queue1'