summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/verify/uploads_spec.rb
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2018-06-20 22:31:48 +0000
committerMayra Cabrera <mcabrera@gitlab.com>2018-06-25 13:39:54 -0500
commitf6a58eee97d70e9ac8c5b7a5ef16cf813deb83cb (patch)
tree560b9e734f8e3b7bc248bd6eef1d25e123c5b48e /spec/lib/gitlab/verify/uploads_spec.rb
parent818aec22711e818e478255067f6b2aef253a4426 (diff)
downloadgitlab-ce-11-0-stable-patch-2.tar.gz
Merge branch 'mk/fix-n-plus-1-queries-in-uploads-check-rake-task' into 'master'11-0-stable-patch-2
Fix N+1 queries in uploads check rake task Closes #47924 See merge request gitlab-org/gitlab-ce!20012
Diffstat (limited to 'spec/lib/gitlab/verify/uploads_spec.rb')
-rw-r--r--spec/lib/gitlab/verify/uploads_spec.rb45
1 files changed, 37 insertions, 8 deletions
diff --git a/spec/lib/gitlab/verify/uploads_spec.rb b/spec/lib/gitlab/verify/uploads_spec.rb
index 296866d3319..38c30fab1ba 100644
--- a/spec/lib/gitlab/verify/uploads_spec.rb
+++ b/spec/lib/gitlab/verify/uploads_spec.rb
@@ -47,20 +47,49 @@ describe Gitlab::Verify::Uploads do
before do
stub_uploads_object_storage(AvatarUploader)
upload.update!(store: ObjectStorage::Store::REMOTE)
- expect(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file)
end
- it 'passes uploads in object storage that exist' do
- expect(file).to receive(:exists?).and_return(true)
+ describe 'returned hash object' do
+ before do
+ expect(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file)
+ end
- expect(failures).to eq({})
+ it 'passes uploads in object storage that exist' do
+ expect(file).to receive(:exists?).and_return(true)
+
+ expect(failures).to eq({})
+ end
+
+ it 'fails uploads in object storage that do not exist' do
+ expect(file).to receive(:exists?).and_return(false)
+
+ expect(failures.keys).to contain_exactly(upload)
+ expect(failure).to include('Remote object does not exist')
+ end
end
- it 'fails uploads in object storage that do not exist' do
- expect(file).to receive(:exists?).and_return(false)
+ describe 'performance' do
+ before do
+ allow(file).to receive(:exists?)
+ allow(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file)
+ end
+
+ it "avoids N+1 queries" do
+ control_count = ActiveRecord::QueryRecorder.new { perform_task }
+
+ # Create additional uploads in object storage
+ projects = create_list(:project, 3, :with_avatar)
+ uploads = projects.flat_map(&:uploads)
+ uploads.each do |upload|
+ upload.update!(store: ObjectStorage::Store::REMOTE)
+ end
+
+ expect { perform_task }.not_to exceed_query_limit(control_count)
+ end
- expect(failures.keys).to contain_exactly(upload)
- expect(failure).to include('Remote object does not exist')
+ def perform_task
+ described_class.new(batch_size: 100).run_batches { }
+ end
end
end
end