Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-11-08 00:10:15 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-11-08 00:10:15 +0300
commit4cf8d931aa8511aa93b8504e940d2f5ddfee7b4c (patch)
tree1c2cd88c4d895757f08b73708bf49b182cc0a715 /spec/workers/packages
parentfbe6bd7c6aae0beb81fa47d5834393ed92662885 (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.rb22
-rw-r--r--spec/workers/packages/npm/cleanup_stale_metadata_cache_worker_spec.rb79
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