diff options
Diffstat (limited to 'spec/lib/object_storage/direct_upload_spec.rb')
-rw-r--r-- | spec/lib/object_storage/direct_upload_spec.rb | 47 |
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 } |