From ae78b85a25cb0c19c3d6a2e4e6c7ca91ed50787d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 24 Feb 2020 12:09:00 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- spec/lib/gitlab/reference_counter_spec.rb | 62 +++++++++++++++++++------------ 1 file changed, 39 insertions(+), 23 deletions(-) (limited to 'spec/lib/gitlab/reference_counter_spec.rb') diff --git a/spec/lib/gitlab/reference_counter_spec.rb b/spec/lib/gitlab/reference_counter_spec.rb index f9361d08faf..ae7b18ca007 100644 --- a/spec/lib/gitlab/reference_counter_spec.rb +++ b/spec/lib/gitlab/reference_counter_spec.rb @@ -2,38 +2,54 @@ require 'spec_helper' -describe Gitlab::ReferenceCounter do - let(:redis) { double('redis') } - let(:reference_counter_key) { "git-receive-pack-reference-counter:project-1" } +describe Gitlab::ReferenceCounter, :clean_gitlab_redis_shared_state do let(:reference_counter) { described_class.new('project-1') } - before do - allow(Gitlab::Redis::SharedState).to receive(:with).and_yield(redis) + describe '#increase' do + it 'increases and sets the expire time of a reference count for a path' do + expect { reference_counter.increase }.to change { reference_counter.value }.by(1) + expect(reference_counter.expires_in).to be_positive + expect(reference_counter.increase).to be(true) + end end - it 'increases and set the expire time of a reference count for a path' do - expect(redis).to receive(:incr).with(reference_counter_key) - expect(redis).to receive(:expire).with(reference_counter_key, - described_class::REFERENCE_EXPIRE_TIME) - expect(reference_counter.increase).to be(true) + describe '#decrease' do + it 'decreases the reference count for a path' do + reference_counter.increase + + expect { reference_counter.decrease }.to change { reference_counter.value }.by(-1) + end + + it 'warns if attempting to decrease a counter with a value of zero or less, and resets the counter' do + expect(Rails.logger).to receive(:warn).with("Reference counter for project-1" \ + " decreased when its value was less than 1. Resetting the counter.") + expect { reference_counter.decrease }.not_to change { reference_counter.value } + end end - it 'decreases the reference count for a path' do - allow(redis).to receive(:decr).and_return(0) - expect(redis).to receive(:decr).with(reference_counter_key) - expect(reference_counter.decrease).to be(true) + describe '#value' do + it 'get the reference count for a path' do + expect(reference_counter.value).to eq(0) + + reference_counter.increase + + expect(reference_counter.value).to eq(1) + end end - it 'warns if attempting to decrease a counter with a value of one or less, and resets the counter' do - expect(redis).to receive(:decr).and_return(-1) - expect(redis).to receive(:del) - expect(Rails.logger).to receive(:warn).with("Reference counter for project-1" \ - " decreased when its value was less than 1. Reseting the counter.") - expect(reference_counter.decrease).to be(true) + describe '#reset!' do + it 'resets reference count down to zero' do + 3.times { reference_counter.increase } + + expect { reference_counter.reset! }.to change { reference_counter.value}.from(3).to(0) + end end - it 'get the reference count for a path' do - allow(redis).to receive(:get).and_return(1) - expect(reference_counter.value).to be(1) + describe '#expires_in' do + it 'displays the expiration time in seconds' do + reference_counter.increase + + expect(reference_counter.expires_in).to be_between(500, 600) + end end end -- cgit v1.2.1