diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-11-08 00:10:15 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-11-08 00:10:15 +0300 |
commit | 4cf8d931aa8511aa93b8504e940d2f5ddfee7b4c (patch) | |
tree | 1c2cd88c4d895757f08b73708bf49b182cc0a715 /spec/workers/packages | |
parent | fbe6bd7c6aae0beb81fa47d5834393ed92662885 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/workers/packages')
-rw-r--r-- | spec/workers/packages/cleanup_package_registry_worker_spec.rb | 22 | ||||
-rw-r--r-- | spec/workers/packages/npm/cleanup_stale_metadata_cache_worker_spec.rb | 79 |
2 files changed, 101 insertions, 0 deletions
diff --git a/spec/workers/packages/cleanup_package_registry_worker_spec.rb b/spec/workers/packages/cleanup_package_registry_worker_spec.rb index f70103070ef..f2787a92fbf 100644 --- a/spec/workers/packages/cleanup_package_registry_worker_spec.rb +++ b/spec/workers/packages/cleanup_package_registry_worker_spec.rb @@ -58,6 +58,28 @@ RSpec.describe Packages::CleanupPackageRegistryWorker, feature_category: :packag end end + context 'with npm metadata caches pending destruction' do + let_it_be(:npm_metadata_cache) { create(:npm_metadata_cache, :stale) } + + it_behaves_like 'an idempotent worker' + + it 'queues the cleanup job' do + expect(Packages::Npm::CleanupStaleMetadataCacheWorker).to receive(:perform_with_capacity) + + perform + end + end + + context 'with no npm metadata caches pending destruction' do + it_behaves_like 'an idempotent worker' + + it 'does not queue the cleanup job' do + expect(Packages::Npm::CleanupStaleMetadataCacheWorker).not_to receive(:perform_with_capacity) + + perform + end + end + describe 'counts logging' do let_it_be(:processing_package_file) { create(:package_file, status: :processing) } diff --git a/spec/workers/packages/npm/cleanup_stale_metadata_cache_worker_spec.rb b/spec/workers/packages/npm/cleanup_stale_metadata_cache_worker_spec.rb new file mode 100644 index 00000000000..390ed0ee453 --- /dev/null +++ b/spec/workers/packages/npm/cleanup_stale_metadata_cache_worker_spec.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Npm::CleanupStaleMetadataCacheWorker, type: :worker, feature_category: :package_registry do + let(:worker) { described_class.new } + + describe '#perform_work' do + subject { worker.perform_work } + + context 'with no work to do' do + it { is_expected.to be_nil } + end + + context 'with work to do' do + let_it_be(:npm_metadata_cache1) { create(:npm_metadata_cache) } + let_it_be(:npm_metadata_cache2) { create(:npm_metadata_cache, :stale) } + + let_it_be(:npm_metadata_cache3) do + create(:npm_metadata_cache, :stale, updated_at: 1.year.ago, created_at: 1.year.ago) + end + + it 'deletes the oldest stale metadata cache based on id', :aggregate_failures do + expect(worker).to receive(:log_extra_metadata_on_done).with(:npm_metadata_cache_id, npm_metadata_cache2.id) + + expect { subject }.to change { Packages::Npm::MetadataCache.count }.by(-1) + expect { npm_metadata_cache2.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + end + + context 'with a stale metadata cache' do + let_it_be(:npm_metadata_cache) { create(:npm_metadata_cache, :stale) } + + context 'with an error during the destroy' do + before do + allow_next_found_instance_of(Packages::Npm::MetadataCache) do |metadata_cache| + allow(metadata_cache).to receive(:destroy!).and_raise('Error!') + end + end + + it 'handles the error' do + expect(Gitlab::ErrorTracking).to receive(:log_exception) + .with(instance_of(RuntimeError), class: described_class.name) + expect { subject }.to change { Packages::Npm::MetadataCache.error.count }.from(0).to(1) + expect(npm_metadata_cache.reload).to be_error + end + end + + context 'when trying to destroy a destroyed record' do + before do + allow_next_found_instance_of(Packages::Npm::MetadataCache) do |metadata_cache| + destroy_method = metadata_cache.method(:destroy!) + + allow(metadata_cache).to receive(:destroy!) do + destroy_method.call + + raise 'Error!' + end + end + end + + it 'handles the error' do + expect(Gitlab::ErrorTracking).to receive(:log_exception) + .with(instance_of(RuntimeError), class: described_class.name) + expect { subject }.not_to change { Packages::Npm::MetadataCache.count } + expect(npm_metadata_cache.reload).to be_error + end + end + end + end + + describe '#max_running_jobs' do + let(:capacity) { described_class::MAX_CAPACITY } + + subject { worker.max_running_jobs } + + it { is_expected.to eq(capacity) } + end +end |