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:
Diffstat (limited to 'spec/models/bulk_imports')
-rw-r--r--spec/models/bulk_imports/entity_spec.rb67
-rw-r--r--spec/models/bulk_imports/export_status_spec.rb8
-rw-r--r--spec/models/bulk_imports/tracker_spec.rb96
3 files changed, 171 insertions, 0 deletions
diff --git a/spec/models/bulk_imports/entity_spec.rb b/spec/models/bulk_imports/entity_spec.rb
index 014b050a5b5..9454549ee1c 100644
--- a/spec/models/bulk_imports/entity_spec.rb
+++ b/spec/models/bulk_imports/entity_spec.rb
@@ -487,4 +487,71 @@ RSpec.describe BulkImports::Entity, type: :model, feature_category: :importers d
expect(subject.source_version).to eq(subject.bulk_import.source_version_info)
end
end
+
+ describe '#checksums' do
+ let(:entity) { create(:bulk_import_entity) }
+
+ it 'returns checksums for all imported relations' do
+ create(:bulk_import_tracker,
+ entity: entity,
+ relation: 'BulkImports::Common::Pipelines::MilestonesPipeline',
+ source_objects_count: 7,
+ fetched_objects_count: 6,
+ imported_objects_count: 5
+ )
+
+ create(:bulk_import_tracker,
+ entity: entity,
+ relation: 'BulkImports::Common::Pipelines::LabelsPipeline',
+ source_objects_count: 10,
+ fetched_objects_count: 9,
+ imported_objects_count: 8
+ )
+
+ expect(entity.checksums).to eq(
+ {
+ milestones: {
+ source: 7,
+ fetched: 6,
+ imported: 5
+ },
+ labels: {
+ source: 10,
+ fetched: 9,
+ imported: 8
+ }
+ }
+ )
+ end
+
+ context 'when tracker should not be included' do
+ let(:tracker) { create(:bulk_import_tracker, entity: entity, relation: 'BulkImports::Common::Pipelines::MilestonesPipeline') }
+
+ context 'when tracker is for a file extraction pipeline' do
+ it 'does not include the tracker' do
+ expect(entity.checksums).to eq({})
+ end
+ end
+
+ context 'when tracker is skipped' do
+ it 'does not include the tracker' do
+ tracker.skip!
+
+ expect(entity.checksums).to eq({})
+ end
+ end
+
+ context 'when tracker checksums are zeros' do
+ it 'does not include the tracker' do
+ tracker.update!(
+ source_objects_count: 0,
+ fetched_objects_count: 0,
+ imported_objects_count: 0
+ )
+
+ expect(entity.checksums).to eq({})
+ end
+ end
+ end
+ end
end
diff --git a/spec/models/bulk_imports/export_status_spec.rb b/spec/models/bulk_imports/export_status_spec.rb
index aa3bce78534..d17ca0aeaaf 100644
--- a/spec/models/bulk_imports/export_status_spec.rb
+++ b/spec/models/bulk_imports/export_status_spec.rb
@@ -389,4 +389,12 @@ RSpec.describe BulkImports::ExportStatus, :clean_gitlab_redis_cache, feature_cat
end
end
end
+
+ describe '#total_objects_count' do
+ let(:status) { BulkImports::Export::FINISHED }
+
+ it 'returns total objects count' do
+ expect(subject.total_objects_count).to eq(1)
+ end
+ end
end
diff --git a/spec/models/bulk_imports/tracker_spec.rb b/spec/models/bulk_imports/tracker_spec.rb
index 25cd5489a9f..474fc4e2ead 100644
--- a/spec/models/bulk_imports/tracker_spec.rb
+++ b/spec/models/bulk_imports/tracker_spec.rb
@@ -110,4 +110,100 @@ RSpec.describe BulkImports::Tracker, type: :model, feature_category: :importers
end
end
end
+
+ describe '#checksums' do
+ let(:tracker) { create(:bulk_import_tracker) }
+ let(:checksums) { { source: 1, fetched: 1, imported: 1 } }
+
+ before do
+ allow(tracker).to receive(:file_extraction_pipeline?).and_return(true)
+ allow(tracker).to receive_message_chain(:pipeline_class, :relation, :to_sym).and_return(:labels)
+ end
+
+ context 'when checksums are cached' do
+ it 'returns the cached checksums' do
+ allow(BulkImports::ObjectCounter).to receive(:summary).and_return(checksums)
+
+ expect(tracker.checksums).to eq({ labels: checksums })
+ end
+ end
+
+ context 'when checksums are persisted' do
+ it 'returns the persisted checksums' do
+ allow(BulkImports::ObjectCounter).to receive(:summary).and_return(nil)
+
+ tracker.update!(
+ source_objects_count: checksums[:source],
+ fetched_objects_count: checksums[:fetched],
+ imported_objects_count: checksums[:imported]
+ )
+
+ expect(tracker.checksums).to eq({ labels: checksums })
+ end
+ end
+
+ context 'when pipeline is not a file extraction pipeline' do
+ it 'returns nil' do
+ allow(tracker).to receive(:file_extraction_pipeline?).and_return(false)
+
+ expect(tracker.checksums).to be_nil
+ end
+ end
+ end
+
+ describe '#checksums_empty?' do
+ let(:tracker) { create(:bulk_import_tracker) }
+
+ before do
+ allow(tracker).to receive_message_chain(:pipeline_class, :relation, :to_sym).and_return(:labels)
+ end
+
+ context 'when checksums are missing' do
+ it 'returns true' do
+ allow(tracker).to receive(:checksums).and_return(nil)
+
+ expect(tracker.checksums_empty?).to eq(true)
+ end
+ end
+
+ context 'when checksums are present' do
+ it 'returns false' do
+ allow(tracker)
+ .to receive(:checksums)
+ .and_return({ labels: { source: 1, fetched: 1, imported: 1 } })
+
+ expect(tracker.checksums_empty?).to eq(false)
+ end
+ end
+
+ context 'when checksums are all zeros' do
+ it 'returns true' do
+ allow(tracker)
+ .to receive(:checksums)
+ .and_return({ labels: { source: 0, fetched: 0, imported: 0 } })
+
+ expect(tracker.checksums_empty?).to eq(true)
+ end
+ end
+ end
+
+ describe 'checksums persistence' do
+ let(:tracker) { create(:bulk_import_tracker, :started) }
+
+ context 'when transitioned to finished' do
+ it 'persists the checksums' do
+ expect(BulkImports::ObjectCounter).to receive(:persist!).with(tracker)
+
+ tracker.finish!
+ end
+ end
+
+ context 'when transitioned to failed' do
+ it 'persists the checksums' do
+ expect(BulkImports::ObjectCounter).to receive(:persist!).with(tracker)
+
+ tracker.fail_op!
+ end
+ end
+ end
end