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/lib/object_storage/direct_upload_spec.rb')
-rw-r--r--spec/lib/object_storage/direct_upload_spec.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/spec/lib/object_storage/direct_upload_spec.rb b/spec/lib/object_storage/direct_upload_spec.rb
index 932d579c3cc..bd9d197afa0 100644
--- a/spec/lib/object_storage/direct_upload_spec.rb
+++ b/spec/lib/object_storage/direct_upload_spec.rb
@@ -162,6 +162,10 @@ RSpec.describe ObjectStorage::DirectUpload do
it 'enables the Workhorse client' do
expect(subject[:UseWorkhorseClient]).to be true
end
+
+ it 'omits the multipart upload URLs' do
+ expect(subject).not_to include(:MultipartUpload)
+ end
end
context 'when only server side encryption is used' do
@@ -292,6 +296,7 @@ RSpec.describe ObjectStorage::DirectUpload do
context 'when IAM profile is true' do
let(:use_iam_profile) { true }
+ let(:iam_credentials_v2_url) { "http://169.254.169.254/latest/api/token" }
let(:iam_credentials_url) { "http://169.254.169.254/latest/meta-data/iam/security-credentials/" }
let(:iam_credentials) do
{
@@ -303,6 +308,9 @@ RSpec.describe ObjectStorage::DirectUpload do
end
before do
+ # If IMDSv2 is disabled, we should still fall back to IMDSv1
+ stub_request(:put, iam_credentials_v2_url)
+ .to_return(status: 404)
stub_request(:get, iam_credentials_url)
.to_return(status: 200, body: "somerole", headers: {})
stub_request(:get, "#{iam_credentials_url}somerole")
@@ -310,6 +318,21 @@ RSpec.describe ObjectStorage::DirectUpload do
end
it_behaves_like 'a valid S3 upload without multipart data'
+
+ context 'when IMSDv2 is available' do
+ let(:iam_token) { 'mytoken' }
+
+ before do
+ stub_request(:put, iam_credentials_v2_url)
+ .to_return(status: 200, body: iam_token)
+ stub_request(:get, iam_credentials_url).with(headers: { "X-aws-ec2-metadata-token" => iam_token })
+ .to_return(status: 200, body: "somerole", headers: {})
+ stub_request(:get, "#{iam_credentials_url}somerole").with(headers: { "X-aws-ec2-metadata-token" => iam_token })
+ .to_return(status: 200, body: iam_credentials.to_json, headers: {})
+ end
+
+ it_behaves_like 'a valid S3 upload without multipart data'
+ end
end
end
@@ -321,6 +344,30 @@ RSpec.describe ObjectStorage::DirectUpload do
stub_object_storage_multipart_init(storage_url, "myUpload")
end
+ context 'when maximum upload size is 0' do
+ let(:maximum_size) { 0 }
+
+ it 'returns maximum number of parts' do
+ expect(subject[:MultipartUpload][:PartURLs].length).to eq(100)
+ end
+
+ it 'part size is minimum, 5MB' do
+ expect(subject[:MultipartUpload][:PartSize]).to eq(5.megabyte)
+ end
+ end
+
+ context 'when maximum upload size is < 5 MB' do
+ let(:maximum_size) { 1024 }
+
+ it 'returns only 1 part' do
+ expect(subject[:MultipartUpload][:PartURLs].length).to eq(1)
+ end
+
+ it 'part size is minimum, 5MB' do
+ expect(subject[:MultipartUpload][:PartSize]).to eq(5.megabyte)
+ end
+ end
+
context 'when maximum upload size is 10MB' do
let(:maximum_size) { 10.megabyte }