diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-14 18:13:32 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-14 18:13:32 +0300 |
commit | 1123408ec8922d4a6908ef4b85aa0ff4fbea08fe (patch) | |
tree | dfd95769ede53024da1b348176b589ba1fc4c801 /spec | |
parent | 2896c7471aa75a7842fe6318a122f83ca6c211bb (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/projects/clusters_controller_spec.rb | 3 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/reports/security/finding_key_spec.rb | 61 | ||||
-rw-r--r-- | spec/lib/gitlab/git/repository_spec.rb | 38 | ||||
-rw-r--r-- | spec/lib/gitlab/git_access_spec.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/gitaly_client/repository_service_spec.rb | 10 | ||||
-rw-r--r-- | spec/lib/gitlab_edition_spec.rb | 25 | ||||
-rw-r--r-- | spec/services/groups/update_statistics_service_spec.rb | 55 | ||||
-rw-r--r-- | spec/workers/groups/update_statistics_worker_spec.rb | 29 |
8 files changed, 135 insertions, 91 deletions
diff --git a/spec/controllers/projects/clusters_controller_spec.rb b/spec/controllers/projects/clusters_controller_spec.rb index cf6bd70f2d2..d0bef810ec8 100644 --- a/spec/controllers/projects/clusters_controller_spec.rb +++ b/spec/controllers/projects/clusters_controller_spec.rb @@ -315,7 +315,8 @@ RSpec.describe Projects::ClustersController do .to receive(:expires_at_in_session).and_return(1.hour.since.to_i.to_s) allow_any_instance_of(GoogleApi::CloudPlatform::Client) .to receive(:projects_zones_clusters_create) do - OpenStruct.new( + double( + 'secure', self_link: 'projects/gcp-project-12345/zones/us-central1-a/operations/ope-123', status: 'RUNNING' ) diff --git a/spec/lib/gitlab/ci/reports/security/finding_key_spec.rb b/spec/lib/gitlab/ci/reports/security/finding_key_spec.rb index 784c1183320..2320f011cf5 100644 --- a/spec/lib/gitlab/ci/reports/security/finding_key_spec.rb +++ b/spec/lib/gitlab/ci/reports/security/finding_key_spec.rb @@ -6,36 +6,47 @@ RSpec.describe Gitlab::Ci::Reports::Security::FindingKey do using RSpec::Parameterized::TableSyntax describe '#==' do - where(:location_fp_1, :location_fp_2, :identifier_fp_1, :identifier_fp_2, :equals?) do - nil | 'different location fp' | 'identifier fp' | 'different identifier fp' | false - 'location fp' | nil | 'identifier fp' | 'different identifier fp' | false - 'location fp' | 'different location fp' | nil | 'different identifier fp' | false - 'location fp' | 'different location fp' | 'identifier fp' | nil | false - nil | nil | 'identifier fp' | 'identifier fp' | false - 'location fp' | 'location fp' | nil | nil | false - nil | nil | nil | nil | false - 'location fp' | 'different location fp' | 'identifier fp' | 'different identifier fp' | false - 'location fp' | 'different location fp' | 'identifier fp' | 'identifier fp' | false - 'location fp' | 'location fp' | 'identifier fp' | 'different identifier fp' | false - 'location fp' | 'location fp' | 'identifier fp' | 'identifier fp' | true - end - - with_them do - let(:finding_key_1) do - build(:ci_reports_security_finding_key, - location_fingerprint: location_fp_1, - identifier_fingerprint: identifier_fp_1) + context 'when the comparison is done between FindingKey instances' do + where(:location_fp_1, :location_fp_2, :identifier_fp_1, :identifier_fp_2, :equals?) do + nil | 'different location fp' | 'identifier fp' | 'different identifier fp' | false + 'location fp' | nil | 'identifier fp' | 'different identifier fp' | false + 'location fp' | 'different location fp' | nil | 'different identifier fp' | false + 'location fp' | 'different location fp' | 'identifier fp' | nil | false + nil | nil | 'identifier fp' | 'identifier fp' | false + 'location fp' | 'location fp' | nil | nil | false + nil | nil | nil | nil | false + 'location fp' | 'different location fp' | 'identifier fp' | 'different identifier fp' | false + 'location fp' | 'different location fp' | 'identifier fp' | 'identifier fp' | false + 'location fp' | 'location fp' | 'identifier fp' | 'different identifier fp' | false + 'location fp' | 'location fp' | 'identifier fp' | 'identifier fp' | true end - let(:finding_key_2) do - build(:ci_reports_security_finding_key, - location_fingerprint: location_fp_2, - identifier_fingerprint: identifier_fp_2) + with_them do + let(:finding_key_1) do + build(:ci_reports_security_finding_key, + location_fingerprint: location_fp_1, + identifier_fingerprint: identifier_fp_1) + end + + let(:finding_key_2) do + build(:ci_reports_security_finding_key, + location_fingerprint: location_fp_2, + identifier_fingerprint: identifier_fp_2) + end + + subject { finding_key_1 == finding_key_2 } + + it { is_expected.to be(equals?) } end + end + + context 'when the comparison is not done between FindingKey instances' do + let(:finding_key) { build(:ci_reports_security_finding_key) } + let(:uuid) { SecureRandom.uuid } - subject { finding_key_1 == finding_key_2 } + subject { finding_key == uuid } - it { is_expected.to be(equals?) } + it { is_expected.to be_falsey } end end end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index f1b6a59abf9..ae6ca728573 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -2252,44 +2252,6 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do end end - describe '#clean_stale_repository_files' do - let(:worktree_id) { 'rebase-1' } - let(:gitlab_worktree_path) { File.join(repository_path, 'gitlab-worktree', worktree_id) } - let(:admin_dir) { File.join(repository_path, 'worktrees') } - - it 'cleans up the files' do - create_worktree = %W[git -C #{repository_path} worktree add --detach #{gitlab_worktree_path} master] - raise 'preparation failed' unless system(*create_worktree, err: '/dev/null') - - FileUtils.touch(gitlab_worktree_path, mtime: Time.now - 8.hours) - # git rev-list --all will fail in git 2.16 if HEAD is pointing to a non-existent object, - # but the HEAD must be 40 characters long or git will ignore it. - File.write(File.join(admin_dir, worktree_id, 'HEAD'), Gitlab::Git::BLANK_SHA) - - expect(rev_list_all).to be(false) - repository.clean_stale_repository_files - - expect(rev_list_all).to be(true) - expect(File.exist?(gitlab_worktree_path)).to be_falsey - end - - def rev_list_all - system(*%W[git -C #{repository_path} rev-list --all], out: '/dev/null', err: '/dev/null') - end - - it 'increments a counter upon an error' do - expect(repository.gitaly_repository_client).to receive(:cleanup).and_raise(Gitlab::Git::CommandError) - - counter = double(:counter) - - expect(counter).to receive(:increment) - expect(Gitlab::Metrics).to receive(:counter).with(:failed_repository_cleanup_total, - 'Number of failed repository cleanup events').and_return(counter) - - repository.clean_stale_repository_files - end - end - describe '#squash' do let(:branch_name) { 'fix' } let(:start_sha) { '4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6' } diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb index 4bf7994f4dd..d6ef1836ad9 100644 --- a/spec/lib/gitlab/git_access_spec.rb +++ b/spec/lib/gitlab/git_access_spec.rb @@ -1008,11 +1008,6 @@ RSpec.describe Gitlab::GitAccess do end end - it 'cleans up the files' do - expect(project.repository).to receive(:clean_stale_repository_files).and_call_original - expect { push_access_check }.not_to raise_error - end - it 'avoids N+1 queries', :request_store do # Run this once to establish a baseline. Cached queries should get # cached, so that when we introduce another change we shouldn't see diff --git a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb index e5502a883b5..353726b56f6 100644 --- a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb +++ b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb @@ -21,16 +21,6 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do end end - describe '#cleanup' do - it 'sends a cleanup message' do - expect_any_instance_of(Gitaly::RepositoryService::Stub) - .to receive(:cleanup) - .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) - - client.cleanup - end - end - describe '#garbage_collect' do it 'sends a garbage_collect message' do expect_any_instance_of(Gitaly::RepositoryService::Stub) diff --git a/spec/lib/gitlab_edition_spec.rb b/spec/lib/gitlab_edition_spec.rb index 2f1316819ec..6fc4312252d 100644 --- a/spec/lib/gitlab_edition_spec.rb +++ b/spec/lib/gitlab_edition_spec.rb @@ -3,18 +3,22 @@ require 'spec_helper' RSpec.describe GitlabEdition do + def remove_instance_variable(ivar) + described_class.remove_instance_variable(ivar) if described_class.instance_variable_defined?(ivar) + end + before do # Make sure the ENV is clean stub_env('FOSS_ONLY', nil) stub_env('EE_ONLY', nil) - described_class.instance_variable_set(:@is_ee, nil) - described_class.instance_variable_set(:@is_jh, nil) + remove_instance_variable(:@is_ee) + remove_instance_variable(:@is_jh) end after do - described_class.instance_variable_set(:@is_ee, nil) - described_class.instance_variable_set(:@is_jh, nil) + remove_instance_variable(:@is_ee) + remove_instance_variable(:@is_jh) end describe '.root' do @@ -51,7 +55,7 @@ RSpec.describe GitlabEdition do allow(described_class).to receive(:ee?).and_return(false) end - it 'returns the exyensions according to the current edition' do + it 'returns the extensions according to the current edition' do expect(described_class.extensions).to be_empty end end @@ -77,7 +81,7 @@ RSpec.describe GitlabEdition do end describe '.ee?' do - context 'for EE' do + context 'when EE' do before do stub_path('ee/app/models/license.rb', exist?: true) end @@ -109,7 +113,7 @@ RSpec.describe GitlabEdition do end end - context 'for CE' do + context 'when CE' do before do stub_path('ee/app/models/license.rb', exist?: false) end @@ -121,12 +125,9 @@ RSpec.describe GitlabEdition do end describe '.jh?' do - context 'for JH' do + context 'when JH' do before do - stub_path( - 'ee/app/models/license.rb', - 'jh', - exist?: true) + stub_path('ee/app/models/license.rb', 'jh', exist?: true) end context 'when using default FOSS_ONLY and EE_ONLY' do diff --git a/spec/services/groups/update_statistics_service_spec.rb b/spec/services/groups/update_statistics_service_spec.rb new file mode 100644 index 00000000000..5bef51c2727 --- /dev/null +++ b/spec/services/groups/update_statistics_service_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Groups::UpdateStatisticsService do + let_it_be(:group, reload: true) { create(:group) } + + let(:statistics) { %w(wiki_size) } + + subject(:service) { described_class.new(group, statistics: statistics)} + + describe '#execute', :aggregate_failures do + context 'when group is nil' do + let(:group) { nil } + + it 'does nothing' do + expect(NamespaceStatistics).not_to receive(:new) + + result = service.execute + + expect(result).to be_error + end + end + + context 'with an existing group' do + context 'when namespace statistics exists for the group' do + it 'uses the existing statistics and refreshes them' do + namespace_statistics = create(:namespace_statistics, namespace: group) + + expect(namespace_statistics).to receive(:refresh!).with(only: statistics.map(&:to_sym)).and_call_original + + result = service.execute + + expect(result).to be_success + end + end + + context 'when namespace statistics does not exist for the group' do + it 'creates the statistics and refreshes them' do + expect_next_instance_of(NamespaceStatistics) do |instance| + expect(instance).to receive(:refresh!).with(only: statistics.map(&:to_sym)).and_call_original + end + + result = nil + + expect do + result = service.execute + end.to change { NamespaceStatistics.count }.by(1) + + expect(result).to be_success + end + end + end + end +end diff --git a/spec/workers/groups/update_statistics_worker_spec.rb b/spec/workers/groups/update_statistics_worker_spec.rb new file mode 100644 index 00000000000..7fc166ed300 --- /dev/null +++ b/spec/workers/groups/update_statistics_worker_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Groups::UpdateStatisticsWorker do + let_it_be(:group) { create(:group) } + + let(:statistics) { %w(wiki_size) } + + subject(:worker) { described_class.new } + + describe '#perform' do + it 'updates the group statistics' do + expect(Groups::UpdateStatisticsService).to receive(:new) + .with(group, statistics: statistics) + .and_call_original + + worker.perform(group.id, statistics) + end + + context 'when group id does not exist' do + it 'ends gracefully' do + expect(Groups::UpdateStatisticsService).not_to receive(:new) + + expect { worker.perform(non_existing_record_id, statistics) }.not_to raise_error + end + end + end +end |