diff options
Diffstat (limited to 'spec/lib/gitlab/git')
-rw-r--r-- | spec/lib/gitlab/git/branch_spec.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/git/diff_collection_spec.rb | 46 | ||||
-rw-r--r-- | spec/lib/gitlab/git/diff_spec.rb | 12 | ||||
-rw-r--r-- | spec/lib/gitlab/git/object_pool_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/git/remote_mirror_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/git/repository_spec.rb | 37 | ||||
-rw-r--r-- | spec/lib/gitlab/git/rugged_impl/use_rugged_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/git/wiki_spec.rb | 5 |
8 files changed, 89 insertions, 29 deletions
diff --git a/spec/lib/gitlab/git/branch_spec.rb b/spec/lib/gitlab/git/branch_spec.rb index e1bcf4aeeb1..9271f635b14 100644 --- a/spec/lib/gitlab/git/branch_spec.rb +++ b/spec/lib/gitlab/git/branch_spec.rb @@ -85,9 +85,9 @@ RSpec.describe Gitlab::Git::Branch, :seed_helper do } end - let(:stale_sha) { Timecop.freeze(Gitlab::Git::Branch::STALE_BRANCH_THRESHOLD.ago - 5.days) { create_commit } } - let(:active_sha) { Timecop.freeze(Gitlab::Git::Branch::STALE_BRANCH_THRESHOLD.ago + 5.days) { create_commit } } - let(:future_sha) { Timecop.freeze(100.days.since) { create_commit } } + let(:stale_sha) { travel_to(Gitlab::Git::Branch::STALE_BRANCH_THRESHOLD.ago - 5.days) { create_commit } } + let(:active_sha) { travel_to(Gitlab::Git::Branch::STALE_BRANCH_THRESHOLD.ago + 5.days) { create_commit } } + let(:future_sha) { travel_to(100.days.since) { create_commit } } before do repository.create_branch('stale-1', stale_sha) diff --git a/spec/lib/gitlab/git/diff_collection_spec.rb b/spec/lib/gitlab/git/diff_collection_spec.rb index b202015464f..1a3c332a21b 100644 --- a/spec/lib/gitlab/git/diff_collection_spec.rb +++ b/spec/lib/gitlab/git/diff_collection_spec.rb @@ -9,8 +9,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do MutatingConstantIterator.class_eval do include Enumerable + attr_reader :size + def initialize(count, value) @count = count + @size = count @value = value end @@ -517,21 +520,39 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do .to yield_with_args(an_instance_of(Gitlab::Git::Diff)) end - it 'prunes diffs that are quite big' do - diff = nil + context 'single-file collections' do + it 'does not prune diffs' do + diff = nil - subject.each do |d| - diff = d + subject.each do |d| + diff = d + end + + expect(diff.diff).not_to eq('') end + end + + context 'multi-file collections' do + let(:iterator) { [{ diff: 'b' }, { diff: 'a' * 20480 }]} + + it 'prunes diffs that are quite big' do + diff = nil - expect(diff.diff).to eq('') + subject.each do |d| + diff = d + end + + expect(diff.diff).to eq('') + end end context 'when go over safe limits on files' do let(:iterator) { [fake_diff(1, 1)] * 4 } before do - stub_const('Gitlab::Git::DiffCollection::DEFAULT_LIMITS', { max_files: 2, max_lines: max_lines }) + allow(Gitlab::Git::DiffCollection) + .to receive(:default_limits) + .and_return({ max_files: 2, max_lines: max_lines }) end it 'prunes diffs by default even little ones' do @@ -556,7 +577,9 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do end before do - stub_const('Gitlab::Git::DiffCollection::DEFAULT_LIMITS', { max_files: max_files, max_lines: 80 }) + allow(Gitlab::Git::DiffCollection) + .to receive(:default_limits) + .and_return({ max_files: max_files, max_lines: 80 }) end it 'prunes diffs by default even little ones' do @@ -581,7 +604,9 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do end before do - stub_const('Gitlab::Git::DiffCollection::DEFAULT_LIMITS', { max_files: max_files, max_lines: 80 }) + allow(Gitlab::Git::DiffCollection) + .to receive(:default_limits) + .and_return({ max_files: max_files, max_lines: 80 }) end it 'prunes diffs by default even little ones' do @@ -665,8 +690,9 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do end before do - stub_const('Gitlab::Git::DiffCollection::DEFAULT_LIMITS', - { max_files: max_files, max_lines: 80 }) + allow(Gitlab::Git::DiffCollection) + .to receive(:default_limits) + .and_return({ max_files: max_files, max_lines: 80 }) end it 'considers size of diffs before the offset for prunning' do diff --git a/spec/lib/gitlab/git/diff_spec.rb b/spec/lib/gitlab/git/diff_spec.rb index 117c519e98d..980a52bb61e 100644 --- a/spec/lib/gitlab/git/diff_spec.rb +++ b/spec/lib/gitlab/git/diff_spec.rb @@ -284,13 +284,21 @@ EOT end describe '#line_count' do - it 'returns the correct number of lines' do - diff = described_class.new(gitaly_diff) + let(:diff) { described_class.new(gitaly_diff) } + it 'returns the correct number of lines' do expect(diff.line_count).to eq(7) end end + describe "#diff_bytesize" do + let(:diff) { described_class.new(gitaly_diff) } + + it "returns the size of the diff in bytes" do + expect(diff.diff_bytesize).to eq(diff.diff.bytesize) + end + end + describe '#too_large?' do it 'returns true for a diff that is too large' do diff = described_class.new(diff: 'a' * 204800) diff --git a/spec/lib/gitlab/git/object_pool_spec.rb b/spec/lib/gitlab/git/object_pool_spec.rb index c8fbc674c73..e1873c6ddb5 100644 --- a/spec/lib/gitlab/git/object_pool_spec.rb +++ b/spec/lib/gitlab/git/object_pool_spec.rb @@ -19,7 +19,7 @@ RSpec.describe Gitlab::Git::ObjectPool do describe '#create' do before do - subject.create + subject.create # rubocop:disable Rails/SaveBang end context "when the pool doesn't exist yet" do @@ -31,7 +31,7 @@ RSpec.describe Gitlab::Git::ObjectPool do context 'when the pool already exists' do it 'raises an FailedPrecondition' do expect do - subject.create + subject.create # rubocop:disable Rails/SaveBang end.to raise_error(GRPC::FailedPrecondition) end end diff --git a/spec/lib/gitlab/git/remote_mirror_spec.rb b/spec/lib/gitlab/git/remote_mirror_spec.rb index 423c4aa9620..92504b7aafe 100644 --- a/spec/lib/gitlab/git/remote_mirror_spec.rb +++ b/spec/lib/gitlab/git/remote_mirror_spec.rb @@ -16,7 +16,7 @@ RSpec.describe Gitlab::Git::RemoteMirror do .to receive(:update_remote_mirror) .with(ref_name, ['master'], ssh_key: 'KEY', known_hosts: 'KNOWN HOSTS', keep_divergent_refs: true) - remote_mirror.update + remote_mirror.update # rubocop:disable Rails/SaveBang end it 'wraps gitaly errors' do @@ -24,7 +24,7 @@ RSpec.describe Gitlab::Git::RemoteMirror do .to receive(:update_remote_mirror) .and_raise(StandardError) - expect { remote_mirror.update }.to raise_error(StandardError) + expect { remote_mirror.update }.to raise_error(StandardError) # rubocop:disable Rails/SaveBang end end end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 73eecd3401a..6dfa791f70b 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -120,7 +120,7 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do let(:expected_extension) { 'tar.gz' } let(:expected_filename) { "#{expected_prefix}.#{expected_extension}" } - let(:expected_path) { File.join(storage_path, cache_key, expected_filename) } + let(:expected_path) { File.join(storage_path, cache_key, "@v2", expected_filename) } let(:expected_prefix) { "gitlab-git-test-#{ref}-#{SeedRepo::LastCommit::ID}" } subject(:metadata) { repository.archive_metadata(ref, storage_path, 'gitlab-git-test', format, append_sha: append_sha, path: path) } @@ -133,12 +133,32 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do expect(metadata['ArchivePrefix']).to eq(expected_prefix) end - it 'sets ArchivePath to the expected globally-unique path' do - # This is really important from a security perspective. Think carefully - # before changing it: https://gitlab.com/gitlab-org/gitlab-foss/issues/45689 - expect(expected_path).to include(File.join(repository.gl_repository, SeedRepo::LastCommit::ID)) + context 'when :include_lfs_blobs_in_archive feature flag is disabled' do + let(:expected_path) { File.join(storage_path, cache_key, expected_filename) } - expect(metadata['ArchivePath']).to eq(expected_path) + before do + stub_feature_flags(include_lfs_blobs_in_archive: false) + end + + it 'sets ArchivePath to the expected globally-unique path' do + # This is really important from a security perspective. Think carefully + # before changing it: https://gitlab.com/gitlab-org/gitlab-foss/issues/45689 + expect(expected_path).to include(File.join(repository.gl_repository, SeedRepo::LastCommit::ID)) + + expect(metadata['ArchivePath']).to eq(expected_path) + end + end + + context 'when :include_lfs_blobs_in_archive feature flag is enabled' do + before do + stub_feature_flags(include_lfs_blobs_in_archive: true) + end + + it 'sets ArchivePath to the expected globally-unique path' do + expect(expected_path).to include(File.join(repository.gl_repository, SeedRepo::LastCommit::ID)) + + expect(metadata['ArchivePath']).to eq(expected_path) + end end context 'path is set' do @@ -1630,13 +1650,14 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do let(:right_branch) { 'test-master' } let(:first_parent_ref) { 'refs/heads/test-master' } let(:target_ref) { 'refs/merge-requests/999/merge' } + let(:allow_conflicts) { false } before do repository.create_branch(right_branch, branch_head) unless repository.ref_exists?(first_parent_ref) end def merge_to_ref - repository.merge_to_ref(user, left_sha, right_branch, target_ref, 'Merge message', first_parent_ref) + repository.merge_to_ref(user, left_sha, right_branch, target_ref, 'Merge message', first_parent_ref, allow_conflicts) end it 'generates a commit in the target_ref' do @@ -2079,7 +2100,7 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do let(:object_pool_rugged) { Rugged::Repository.new(object_pool_path) } before do - object_pool.create + object_pool.create # rubocop:disable Rails/SaveBang end it 'does not raise an error when disconnecting a non-linked repository' do diff --git a/spec/lib/gitlab/git/rugged_impl/use_rugged_spec.rb b/spec/lib/gitlab/git/rugged_impl/use_rugged_spec.rb index 4f6a3fb823e..16cea1dc1a3 100644 --- a/spec/lib/gitlab/git/rugged_impl/use_rugged_spec.rb +++ b/spec/lib/gitlab/git/rugged_impl/use_rugged_spec.rb @@ -7,7 +7,7 @@ require 'tempfile' RSpec.describe Gitlab::Git::RuggedImpl::UseRugged, :seed_helper do let(:project) { create(:project, :repository) } let(:repository) { project.repository } - let(:feature_flag_name) { 'feature-flag-name' } + let(:feature_flag_name) { wrapper.rugged_feature_keys.first } let(:temp_gitaly_metadata_file) { create_temporary_gitaly_metadata_file } before(:all) do @@ -47,7 +47,7 @@ RSpec.describe Gitlab::Git::RuggedImpl::UseRugged, :seed_helper do end end - context 'when feature flag is not persisted' do + context 'when feature flag is not persisted', stub_feature_flags: false do context 'when running puma with multiple threads' do before do allow(subject).to receive(:running_puma_with_multiple_threads?).and_return(true) diff --git a/spec/lib/gitlab/git/wiki_spec.rb b/spec/lib/gitlab/git/wiki_spec.rb index a88097705f6..36bff42d937 100644 --- a/spec/lib/gitlab/git/wiki_spec.rb +++ b/spec/lib/gitlab/git/wiki_spec.rb @@ -51,6 +51,11 @@ RSpec.describe Gitlab::Git::Wiki do expect(subject.page(title: 'page1', dir: '').url_path).to eq 'page1' expect(subject.page(title: 'page1', dir: 'foo').url_path).to eq 'foo/page1' end + + it 'returns nil for invalid arguments' do + expect(subject.page(title: '')).to be_nil + expect(subject.page(title: 'foo', version: ':')).to be_nil + end end describe '#delete_page' do |