diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-29 18:09:48 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-29 18:09:48 +0300 |
commit | f4d51a9f71cf3d4b0874a3e1948fe3c1ea193c4d (patch) | |
tree | 7ae3da76e824c435167dd108721c0124ad2ee484 /spec/workers | |
parent | 2dedd78ef505a0ab0a379c7340a3fcba56ada663 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/workers')
5 files changed, 109 insertions, 4 deletions
diff --git a/spec/workers/environments/auto_delete_cron_worker_spec.rb b/spec/workers/environments/auto_delete_cron_worker_spec.rb new file mode 100644 index 00000000000..b18f3da5d10 --- /dev/null +++ b/spec/workers/environments/auto_delete_cron_worker_spec.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Environments::AutoDeleteCronWorker do + include CreateEnvironmentsHelpers + + let(:worker) { described_class.new } + + describe '#perform' do + subject { worker.perform } + + let_it_be(:project) { create(:project, :repository) } + + let!(:environment) { create(:environment, :auto_deletable, project: project) } + + it 'deletes the environment' do + expect { subject }.to change { Environment.count }.by(-1) + end + + context 'when environment is not stopped' do + let!(:environment) { create(:environment, :available, auto_delete_at: 1.day.ago, project: project) } + + it 'does not delete the environment' do + expect { subject }.not_to change { Environment.count } + end + end + + context 'when auto_delete_at is null' do + let!(:environment) { create(:environment, :stopped, auto_delete_at: nil, project: project) } + + it 'does not delete the environment' do + expect { subject }.not_to change { Environment.count } + end + end + + context 'with multiple deletable environments' do + let!(:other_environment) { create(:environment, :auto_deletable, project: project) } + + it 'deletes all deletable environments' do + expect { subject }.to change { Environment.count }.by(-2) + end + + context 'when loop reached loop limit' do + before do + stub_const("#{described_class}::LOOP_LIMIT", 1) + stub_const("#{described_class}::BATCH_SIZE", 1) + end + + it 'deletes only one deletable environment' do + expect { subject }.to change { Environment.count }.by(-1) + end + end + + context 'when batch size is less than the number of environments' do + before do + stub_const("#{described_class}::BATCH_SIZE", 1) + end + + it 'deletes all deletable environments' do + expect { subject }.to change { Environment.count }.by(-2) + end + end + end + + context 'with multiple deployments' do + it 'deletes the deployment records and refs' do + deployment_1 = create(:deployment, environment: environment, project: project) + deployment_2 = create(:deployment, environment: environment, project: project) + deployment_1.create_ref + deployment_2.create_ref + + expect(project.repository.commit(deployment_1.ref_path)).to be_present + expect(project.repository.commit(deployment_2.ref_path)).to be_present + + expect { subject }.to change { Deployment.count }.by(-2) + + expect(project.repository.commit(deployment_1.ref_path)).not_to be_present + expect(project.repository.commit(deployment_2.ref_path)).not_to be_present + end + end + + context 'when loop reached timeout' do + before do + stub_const("#{described_class}::LOOP_TIMEOUT", 0.seconds) + stub_const("#{described_class}::LOOP_LIMIT", 100_000) + allow_next_instance_of(described_class) do |worker| + allow(worker).to receive(:destroy_in_batch) { true } + end + end + + it 'does not delete the environment' do + expect { subject }.not_to change { Environment.count } + end + end + + context 'with idempotent flag' do + include_examples 'an idempotent worker' do + it 'deletes the environment' do + expect { subject }.to change { Environment.count }.by(-1) + end + end + end + end +end diff --git a/spec/workers/pages_domain_verification_cron_worker_spec.rb b/spec/workers/pages_domain_verification_cron_worker_spec.rb index 01eaf984c90..a7e5d02a743 100644 --- a/spec/workers/pages_domain_verification_cron_worker_spec.rb +++ b/spec/workers/pages_domain_verification_cron_worker_spec.rb @@ -11,7 +11,7 @@ RSpec.describe PagesDomainVerificationCronWorker do let!(:disabled) { create(:pages_domain, :disabled) } it 'does nothing if the database is read-only' do - allow(Gitlab::Database).to receive(:read_only?).and_return(true) + allow(Gitlab::Database.main).to receive(:read_only?).and_return(true) expect(PagesDomainVerificationWorker).not_to receive(:perform_async).with(reverify.id) worker.perform diff --git a/spec/workers/pages_domain_verification_worker_spec.rb b/spec/workers/pages_domain_verification_worker_spec.rb index 6d2f9ee2f8d..c9a4b7a97b4 100644 --- a/spec/workers/pages_domain_verification_worker_spec.rb +++ b/spec/workers/pages_domain_verification_worker_spec.rb @@ -9,7 +9,7 @@ RSpec.describe PagesDomainVerificationWorker do describe '#perform' do it 'does nothing if the database is read-only' do - allow(Gitlab::Database).to receive(:read_only?).and_return(true) + allow(Gitlab::Database.main).to receive(:read_only?).and_return(true) expect(PagesDomain).not_to receive(:find_by).with(id: domain.id) worker.perform(domain.id) diff --git a/spec/workers/projects/git_garbage_collect_worker_spec.rb b/spec/workers/projects/git_garbage_collect_worker_spec.rb index 7b54d7df4b2..10525cf217b 100644 --- a/spec/workers/projects/git_garbage_collect_worker_spec.rb +++ b/spec/workers/projects/git_garbage_collect_worker_spec.rb @@ -67,7 +67,7 @@ RSpec.describe Projects::GitGarbageCollectWorker do end it 'does nothing if the database is read-only' do - allow(Gitlab::Database).to receive(:read_only?) { true } + allow(Gitlab::Database.main).to receive(:read_only?) { true } expect(Gitlab::Cleanup::OrphanLfsFileReferences).not_to receive(:new) subject.perform(*params) diff --git a/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb b/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb index ef515e43474..345b3f31353 100644 --- a/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb +++ b/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb @@ -7,7 +7,7 @@ RSpec.describe ScheduleMergeRequestCleanupRefsWorker do describe '#perform' do it 'does nothing if the database is read-only' do - allow(Gitlab::Database).to receive(:read_only?).and_return(true) + allow(Gitlab::Database.main).to receive(:read_only?).and_return(true) expect(MergeRequestCleanupRefsWorker).not_to receive(:perform_with_capacity) worker.perform |