diff options
Diffstat (limited to 'spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb')
-rw-r--r-- | spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb | 82 |
1 files changed, 68 insertions, 14 deletions
diff --git a/spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb b/spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb index d98ea1b6ab2..e6592f7f204 100644 --- a/spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb +++ b/spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe ContainerExpirationPolicies::CleanupContainerRepositoryWorker do + using RSpec::Parameterized::TableSyntax + let_it_be(:repository, reload: true) { create(:container_repository, :cleanup_scheduled) } let_it_be(:project) { repository.project } let_it_be(:policy) { project.container_expiration_policy } @@ -19,23 +21,55 @@ RSpec.describe ContainerExpirationPolicies::CleanupContainerRepositoryWorker do RSpec.shared_examples 'handling all repository conditions' do it 'sends the repository for cleaning' do + service_response = cleanup_service_response(repository: repository) expect(ContainerExpirationPolicies::CleanupService) - .to receive(:new).with(repository).and_return(double(execute: cleanup_service_response(repository: repository))) - expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_status, :finished) - expect(worker).to receive(:log_extra_metadata_on_done).with(:container_repository_id, repository.id) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response) subject end context 'with unfinished cleanup' do it 'logs an unfinished cleanup' do + service_response = cleanup_service_response(status: :unfinished, repository: repository) expect(ContainerExpirationPolicies::CleanupService) - .to receive(:new).with(repository).and_return(double(execute: cleanup_service_response(status: :unfinished, repository: repository))) - expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_status, :unfinished) - expect(worker).to receive(:log_extra_metadata_on_done).with(:container_repository_id, repository.id) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response, cleanup_status: :unfinished) subject end + + context 'with a truncated list of tags to delete' do + it 'logs an unfinished cleanup' do + service_response = cleanup_service_response(status: :unfinished, repository: repository, cleanup_tags_service_after_truncate_size: 10, cleanup_tags_service_before_delete_size: 5) + expect(ContainerExpirationPolicies::CleanupService) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response, cleanup_status: :unfinished, truncated: true) + + subject + end + end + + context 'the truncated log field' do + where(:before_truncate_size, :after_truncate_size, :truncated) do + 100 | 100 | false + 100 | 80 | true + nil | 100 | false + 100 | nil | false + nil | nil | false + end + + with_them do + it 'is logged properly' do + service_response = cleanup_service_response(status: :unfinished, repository: repository, cleanup_tags_service_after_truncate_size: after_truncate_size, cleanup_tags_service_before_truncate_size: before_truncate_size) + expect(ContainerExpirationPolicies::CleanupService) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response, cleanup_status: :unfinished, truncated: truncated) + + subject + end + end + end end context 'with policy running shortly' do @@ -87,10 +121,10 @@ RSpec.describe ContainerExpirationPolicies::CleanupContainerRepositoryWorker do let_it_be(:another_repository) { create(:container_repository, :cleanup_unfinished) } it 'process the cleanup scheduled repository first' do + service_response = cleanup_service_response(repository: repository) expect(ContainerExpirationPolicies::CleanupService) - .to receive(:new).with(repository).and_return(double(execute: cleanup_service_response(repository: repository))) - expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_status, :finished) - expect(worker).to receive(:log_extra_metadata_on_done).with(:container_repository_id, repository.id) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response) subject end @@ -105,10 +139,10 @@ RSpec.describe ContainerExpirationPolicies::CleanupContainerRepositoryWorker do end it 'process the repository with the oldest expiration_policy_started_at' do + service_response = cleanup_service_response(repository: repository) expect(ContainerExpirationPolicies::CleanupService) - .to receive(:new).with(repository).and_return(double(execute: cleanup_service_response(repository: repository))) - expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_status, :finished) - expect(worker).to receive(:log_extra_metadata_on_done).with(:container_repository_id, repository.id) + .to receive(:new).with(repository).and_return(double(execute: service_response)) + expect_log_extra_metadata(service_response: service_response) subject end @@ -164,8 +198,28 @@ RSpec.describe ContainerExpirationPolicies::CleanupContainerRepositoryWorker do end end - def cleanup_service_response(status: :finished, repository:) - ServiceResponse.success(message: "cleanup #{status}", payload: { cleanup_status: status, container_repository_id: repository.id }) + def cleanup_service_response(status: :finished, repository:, cleanup_tags_service_original_size: 100, cleanup_tags_service_before_truncate_size: 80, cleanup_tags_service_after_truncate_size: 80, cleanup_tags_service_before_delete_size: 50) + ServiceResponse.success( + message: "cleanup #{status}", + payload: { + cleanup_status: status, + container_repository_id: repository.id, + cleanup_tags_service_original_size: cleanup_tags_service_original_size, + cleanup_tags_service_before_truncate_size: cleanup_tags_service_before_truncate_size, + cleanup_tags_service_after_truncate_size: cleanup_tags_service_after_truncate_size, + cleanup_tags_service_before_delete_size: cleanup_tags_service_before_delete_size + }.compact + ) + end + + def expect_log_extra_metadata(service_response:, cleanup_status: :finished, truncated: false) + expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_status, cleanup_status) + expect(worker).to receive(:log_extra_metadata_on_done).with(:container_repository_id, repository.id) + %i[cleanup_tags_service_original_size cleanup_tags_service_before_truncate_size cleanup_tags_service_after_truncate_size cleanup_tags_service_before_delete_size].each do |field| + value = service_response.payload[field] + expect(worker).to receive(:log_extra_metadata_on_done).with(field, value) unless value.nil? + end + expect(worker).to receive(:log_extra_metadata_on_done).with(:cleanup_tags_service_truncated, truncated) end end |