Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-16 21:25:58 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-16 21:25:58 +0300
commita5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch)
treefb69158581673816a8cd895f9d352dcb3c678b1e /spec/lib/gitlab/checks
parentd16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff)
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'spec/lib/gitlab/checks')
-rw-r--r--spec/lib/gitlab/checks/changes_access_spec.rb42
-rw-r--r--spec/lib/gitlab/checks/lfs_check_spec.rb10
-rw-r--r--spec/lib/gitlab/checks/lfs_integrity_spec.rb30
-rw-r--r--spec/lib/gitlab/checks/matching_merge_request_spec.rb68
-rw-r--r--spec/lib/gitlab/checks/single_change_access_spec.rb (renamed from spec/lib/gitlab/checks/change_access_spec.rb)10
5 files changed, 146 insertions, 14 deletions
diff --git a/spec/lib/gitlab/checks/changes_access_spec.rb b/spec/lib/gitlab/checks/changes_access_spec.rb
new file mode 100644
index 00000000000..a46732f8255
--- /dev/null
+++ b/spec/lib/gitlab/checks/changes_access_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Checks::ChangesAccess do
+ describe '#validate!' do
+ include_context 'changes access checks context'
+
+ before do
+ allow(project).to receive(:lfs_enabled?).and_return(true)
+ end
+
+ subject { changes_access }
+
+ context 'without failed checks' do
+ it "doesn't raise an error" do
+ expect { subject.validate! }.not_to raise_error
+ end
+
+ it 'calls lfs checks' do
+ expect_next_instance_of(Gitlab::Checks::LfsCheck) do |instance|
+ expect(instance).to receive(:validate!)
+ end
+
+ subject.validate!
+ end
+ end
+
+ context 'when time limit was reached' do
+ it 'raises a TimeoutError' do
+ logger = Gitlab::Checks::TimedLogger.new(start_time: timeout.ago, timeout: timeout)
+ access = described_class.new(changes,
+ project: project,
+ user_access: user_access,
+ protocol: protocol,
+ logger: logger)
+
+ expect { access.validate! }.to raise_error(Gitlab::Checks::TimedLogger::TimeoutError)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/checks/lfs_check_spec.rb b/spec/lib/gitlab/checks/lfs_check_spec.rb
index 19c1d820dff..331a43b814f 100644
--- a/spec/lib/gitlab/checks/lfs_check_spec.rb
+++ b/spec/lib/gitlab/checks/lfs_check_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe Gitlab::Checks::LfsCheck do
- include_context 'change access checks context'
+ include_context 'changes access checks context'
let(:blob_object) { project.repository.blob_at_branch('lfs', 'files/lfs/lfs_object.iso') }
@@ -15,6 +15,10 @@ RSpec.describe Gitlab::Checks::LfsCheck do
describe '#validate!' do
context 'with LFS not enabled' do
+ before do
+ allow(project).to receive(:lfs_enabled?).and_return(false)
+ end
+
it 'skips integrity check' do
expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers)
@@ -51,13 +55,13 @@ RSpec.describe Gitlab::Checks::LfsCheck do
context 'with missing newrev' do
it_behaves_like 'a skipped integrity check' do
- let(:changes) { { oldrev: oldrev, ref: ref } }
+ let(:changes) { [{ oldrev: oldrev, ref: ref }] }
end
end
context 'with blank newrev' do
it_behaves_like 'a skipped integrity check' do
- let(:changes) { { oldrev: oldrev, newrev: Gitlab::Git::BLANK_SHA, ref: ref } }
+ let(:changes) { [{ oldrev: oldrev, newrev: Gitlab::Git::BLANK_SHA, ref: ref }] }
end
end
end
diff --git a/spec/lib/gitlab/checks/lfs_integrity_spec.rb b/spec/lib/gitlab/checks/lfs_integrity_spec.rb
index 4583cd72cfd..3468094ffa5 100644
--- a/spec/lib/gitlab/checks/lfs_integrity_spec.rb
+++ b/spec/lib/gitlab/checks/lfs_integrity_spec.rb
@@ -18,12 +18,18 @@ RSpec.describe Gitlab::Checks::LfsIntegrity do
operations.commit_tree('8856a329dd38ca86dfb9ce5aa58a16d88cc119bd', "New LFS objects")
end
- subject { described_class.new(project, newrev, time_left) }
+ let(:newrevs) { [newrev] }
+
+ subject { described_class.new(project, newrevs, time_left) }
describe '#objects_missing?' do
let(:blob_object) { repository.blob_at_branch('lfs', 'files/lfs/lfs_object.iso') }
context 'with LFS not enabled' do
+ before do
+ allow(project).to receive(:lfs_enabled?).and_return(false)
+ end
+
it 'skips integrity check' do
expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers)
@@ -36,8 +42,28 @@ RSpec.describe Gitlab::Checks::LfsIntegrity do
allow(project).to receive(:lfs_enabled?).and_return(true)
end
+ context 'nil rev' do
+ let(:newrevs) { [nil] }
+
+ it 'skips integrity check' do
+ expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers)
+
+ expect(subject.objects_missing?).to be_falsey
+ end
+ end
+
context 'deletion' do
- let(:newrev) { nil }
+ let(:newrevs) { [Gitlab::Git::BLANK_SHA] }
+
+ it 'skips integrity check' do
+ expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers)
+
+ expect(subject.objects_missing?).to be_falsey
+ end
+ end
+
+ context 'no changes' do
+ let(:newrevs) { [] }
it 'skips integrity check' do
expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers)
diff --git a/spec/lib/gitlab/checks/matching_merge_request_spec.rb b/spec/lib/gitlab/checks/matching_merge_request_spec.rb
index ca7ee784ee3..feda488a936 100644
--- a/spec/lib/gitlab/checks/matching_merge_request_spec.rb
+++ b/spec/lib/gitlab/checks/matching_merge_request_spec.rb
@@ -18,6 +18,9 @@ RSpec.describe Gitlab::Checks::MatchingMergeRequest do
subject { described_class.new(newrev, target_branch, project) }
+ let(:total_counter) { subject.send(:total_counter) }
+ let(:stale_counter) { subject.send(:stale_counter) }
+
it 'matches a merge request' do
expect(subject.match?).to be true
end
@@ -27,5 +30,70 @@ RSpec.describe Gitlab::Checks::MatchingMergeRequest do
expect(matcher.match?).to be false
end
+
+ context 'with load balancing disabled', :request_store, :redis do
+ before do
+ expect(::Gitlab::Database::LoadBalancing).to receive(:enable?).at_least(:once).and_return(false)
+ expect(::Gitlab::Database::LoadBalancing::Sticking).not_to receive(:unstick_or_continue_sticking)
+ expect(::Gitlab::Database::LoadBalancing::Sticking).not_to receive(:select_valid_replicas)
+ end
+
+ it 'does not attempt to stick to primary' do
+ expect(subject.match?).to be true
+ end
+
+ it 'increments no counters' do
+ expect { subject.match? }
+ .to change { total_counter.get }.by(0)
+ .and change { stale_counter.get }.by(0)
+ end
+ end
+
+ context 'with load balancing enabled', :request_store, :redis do
+ let(:session) { ::Gitlab::Database::LoadBalancing::Session.current }
+ let(:all_caught_up) { true }
+
+ before do
+ expect(::Gitlab::Database::LoadBalancing).to receive(:enable?).at_least(:once).and_return(true)
+ allow(::Gitlab::Database::LoadBalancing::Sticking).to receive(:all_caught_up?).and_return(all_caught_up)
+
+ expect(::Gitlab::Database::LoadBalancing::Sticking).to receive(:select_valid_host).with(:project, project.id).and_call_original
+ allow(::Gitlab::Database::LoadBalancing::Sticking).to receive(:select_caught_up_replicas).with(:project, project.id).and_return(all_caught_up)
+ end
+
+ shared_examples 'secondary that has caught up to a primary' do
+ it 'continues to use the secondary' do
+ expect(session.use_primary?).to be false
+ expect(subject.match?).to be true
+ end
+
+ it 'only increments total counter' do
+ expect { subject.match? }
+ .to change { total_counter.get }.by(1)
+ .and change { stale_counter.get }.by(0)
+ end
+ end
+
+ shared_examples 'secondary that is lagging primary' do
+ it 'sticks to the primary' do
+ expect(subject.match?).to be true
+ expect(session.use_primary?).to be true
+ end
+
+ it 'increments both total and stale counters' do
+ expect { subject.match? }
+ .to change { total_counter.get }.by(1)
+ .and change { stale_counter.get }.by(1)
+ end
+ end
+
+ it_behaves_like 'secondary that has caught up to a primary'
+
+ context 'on secondary behind primary' do
+ let(:all_caught_up) { false }
+
+ it_behaves_like 'secondary that is lagging primary'
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/checks/change_access_spec.rb b/spec/lib/gitlab/checks/single_change_access_spec.rb
index 6f82dabb285..8b235005b3e 100644
--- a/spec/lib/gitlab/checks/change_access_spec.rb
+++ b/spec/lib/gitlab/checks/single_change_access_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Gitlab::Checks::ChangeAccess do
+RSpec.describe Gitlab::Checks::SingleChangeAccess do
describe '#validate!' do
include_context 'change access checks context'
@@ -37,14 +37,6 @@ RSpec.describe Gitlab::Checks::ChangeAccess do
subject.validate!
end
- it 'calls lfs checks' do
- expect_next_instance_of(Gitlab::Checks::LfsCheck) do |instance|
- expect(instance).to receive(:validate!)
- end
-
- subject.validate!
- end
-
it 'calls diff checks' do
expect_next_instance_of(Gitlab::Checks::DiffCheck) do |instance|
expect(instance).to receive(:validate!)