diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-20 12:40:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-20 12:40:42 +0300 |
commit | ee664acb356f8123f4f6b00b73c1e1cf0866c7fb (patch) | |
tree | f8479f94a28f66654c6a4f6fb99bad6b4e86a40e /spec/uploaders | |
parent | 62f7d5c5b69180e82ae8196b7b429eeffc8e7b4f (diff) |
Add latest changes from gitlab-org/gitlab@15-5-stable-eev15.5.0-rc42
Diffstat (limited to 'spec/uploaders')
-rw-r--r-- | spec/uploaders/job_artifact_uploader_spec.rb | 8 | ||||
-rw-r--r-- | spec/uploaders/object_storage/cdn/google_cdn_spec.rb | 22 | ||||
-rw-r--r-- | spec/uploaders/object_storage/cdn_spec.rb | 44 | ||||
-rw-r--r-- | spec/uploaders/packages/rpm/repository_file_uploader_spec.rb | 45 |
4 files changed, 111 insertions, 8 deletions
diff --git a/spec/uploaders/job_artifact_uploader_spec.rb b/spec/uploaders/job_artifact_uploader_spec.rb index 9ccf216d1fc..a7fd040837f 100644 --- a/spec/uploaders/job_artifact_uploader_spec.rb +++ b/spec/uploaders/job_artifact_uploader_spec.rb @@ -23,6 +23,14 @@ RSpec.describe JobArtifactUploader do it_behaves_like "builds correct paths", store_dir: %r[\h{2}/\h{2}/\h{64}/\d{4}_\d{1,2}_\d{1,2}/\d+/\d+\z] + + describe '#cdn_enabled_url' do + it 'returns URL and false' do + result = uploader.cdn_enabled_url(nil, '127.0.0.1') + + expect(result.used_cdn).to be false + end + end end context 'file is stored in valid local_path' do diff --git a/spec/uploaders/object_storage/cdn/google_cdn_spec.rb b/spec/uploaders/object_storage/cdn/google_cdn_spec.rb index b72f6d66d69..8e209dabddc 100644 --- a/spec/uploaders/object_storage/cdn/google_cdn_spec.rb +++ b/spec/uploaders/object_storage/cdn/google_cdn_spec.rb @@ -30,6 +30,8 @@ RSpec.describe ObjectStorage::CDN::GoogleCDN, '2600:1900:4180:0000:0000:0000:0000:0000' | false '10.10.1.5' | false 'fc00:0000:0000:0000:0000:0000:0000:0000' | false + '127.0.0.1' | false + '169.254.0.0' | false end with_them do @@ -68,6 +70,26 @@ RSpec.describe ObjectStorage::CDN::GoogleCDN, expect(subject.use_cdn?(public_ip)).to be false end end + + context 'when URL is a domain' do + before do + options[:url] = 'cdn.gitlab.example.com' + end + + it 'returns false' do + expect(subject.use_cdn?(public_ip)).to be false + end + end + + context 'when URL uses HTTP' do + before do + options[:url] = 'http://cdn.gitlab.example.com' + end + + it 'returns false' do + expect(subject.use_cdn?(public_ip)).to be false + end + end end describe '#signed_url' do diff --git a/spec/uploaders/object_storage/cdn_spec.rb b/spec/uploaders/object_storage/cdn_spec.rb index 246cb1bf349..f99450b274f 100644 --- a/spec/uploaders/object_storage/cdn_spec.rb +++ b/spec/uploaders/object_storage/cdn_spec.rb @@ -10,7 +10,7 @@ RSpec.describe ObjectStorage::CDN do 'provider' => 'google', 'url' => 'https://gitlab.example.com', 'key_name' => 'test-key', - 'key' => '12345' + 'key' => Base64.urlsafe_encode64('12345') } } }.freeze @@ -31,21 +31,49 @@ RSpec.describe ObjectStorage::CDN do end let(:object) { build_stubbed(:user) } + let(:public_ip) { '18.245.0.1' } + + let_it_be(:project) { build(:project) } subject { uploader_class.new(object, :file) } context 'with CDN config' do before do + stub_artifacts_object_storage(enabled: true) uploader_class.options = Settingslogic.new(Gitlab.config.uploads.deep_merge(cdn_options)) end - describe '#use_cdn?' do - it 'returns true' do - expect_next_instance_of(ObjectStorage::CDN::GoogleCDN) do |cdn| - expect(cdn).to receive(:use_cdn?).and_return(true) + describe '#cdn_enabled_url' do + context 'with ci_job_artifacts_cdn feature flag disabled' do + before do + stub_feature_flags(ci_job_artifacts_cdn: false) end - expect(subject.use_cdn?('18.245.0.1')).to be true + it 'calls #url' do + expect(subject).to receive(:url).and_call_original + expect(subject).not_to receive(:cdn_signed_url) + + result = subject.cdn_enabled_url(project, public_ip) + + expect(result.used_cdn).to be false + end + end + + context 'with ci_job_artifacts_cdn feature flag enabled' do + it 'calls #cdn_signed_url' do + expect(subject).not_to receive(:url) + expect(subject).to receive(:cdn_signed_url).and_call_original + + result = subject.cdn_enabled_url(project, public_ip) + + expect(result.used_cdn).to be true + end + end + end + + describe '#use_cdn?' do + it 'returns true' do + expect(subject.use_cdn?(public_ip)).to be true end end @@ -67,7 +95,7 @@ RSpec.describe ObjectStorage::CDN do describe '#use_cdn?' do it 'returns false' do - expect(subject.use_cdn?('18.245.0.1')).to be false + expect(subject.use_cdn?(public_ip)).to be false end end end @@ -79,7 +107,7 @@ RSpec.describe ObjectStorage::CDN do end it 'raises an error' do - expect { subject.use_cdn?('18.245.0.1') }.to raise_error("Unknown CDN provider: amazon") + expect { subject.use_cdn?(public_ip) }.to raise_error("Unknown CDN provider: amazon") end end end diff --git a/spec/uploaders/packages/rpm/repository_file_uploader_spec.rb b/spec/uploaders/packages/rpm/repository_file_uploader_spec.rb new file mode 100644 index 00000000000..720e109533b --- /dev/null +++ b/spec/uploaders/packages/rpm/repository_file_uploader_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryFileUploader do + let_it_be(:repository_file) { create(:rpm_repository_file) } + let(:uploader) { described_class.new(repository_file, :file) } + let(:path) { Gitlab.config.packages.storage_path } + + subject { uploader } + + it_behaves_like 'builds correct paths', + store_dir: %r[^\h{2}/\h{2}/\h{64}/projects/\d+/rpm/repository_files/\d+$], + cache_dir: %r{/packages/tmp/cache}, + work_dir: %r{/packages/tmp/work} + + context 'when object store is remote' do + before do + stub_rpm_repository_file_object_storage + end + + include_context 'with storage', described_class::Store::REMOTE + + it_behaves_like 'builds correct paths', + store_dir: %r[^\h{2}/\h{2}/\h{64}/projects/\d+/rpm/repository_files/\d+$] + end + + describe 'remote file' do + let(:repository_file) { create(:rpm_repository_file, :object_storage) } + + context 'with object storage enabled' do + before do + stub_rpm_repository_file_object_storage + end + + it 'can store file remotely' do + allow(ObjectStorage::BackgroundMoveWorker).to receive(:perform_async) + + repository_file + + expect(repository_file.file_store).to eq(described_class::Store::REMOTE) + expect(repository_file.file.path).not_to be_blank + end + end + end +end |