aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage/test
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2019-05-16 10:58:33 -0400
committerGitHub <noreply@github.com>2019-05-16 10:58:33 -0400
commit9c5135ce6a10c8318e25a587620c8cde4563f348 (patch)
tree11e6ed9800b9bf401e02515607d1861092e31c78 /activestorage/test
parentc8396e030f4b1edd48340975696dcaf6aa8291c9 (diff)
downloadrails-9c5135ce6a10c8318e25a587620c8cde4563f348.tar.gz
rails-9c5135ce6a10c8318e25a587620c8cde4563f348.tar.bz2
rails-9c5135ce6a10c8318e25a587620c8cde4563f348.zip
S3: permit uploading files larger than 5 GB
Use multipart uploads for files larger than 100 MB. Dynamically calculate part size based on total object size and maximum part count.
Diffstat (limited to 'activestorage/test')
-rw-r--r--activestorage/test/service/s3_service_test.rb22
1 files changed, 20 insertions, 2 deletions
diff --git a/activestorage/test/service/s3_service_test.rb b/activestorage/test/service/s3_service_test.rb
index 74c0aa0405..b9120770e6 100644
--- a/activestorage/test/service/s3_service_test.rb
+++ b/activestorage/test/service/s3_service_test.rb
@@ -46,8 +46,7 @@ if SERVICE_CONFIGURATIONS[:s3]
end
test "uploading with server-side encryption" do
- config = SERVICE_CONFIGURATIONS.deep_merge(s3: { upload: { server_side_encryption: "AES256" } })
- service = ActiveStorage::Service.configure(:s3, config)
+ service = build_service(upload: { server_side_encryption: "AES256" })
begin
key = SecureRandom.base58(24)
@@ -77,6 +76,25 @@ if SERVICE_CONFIGURATIONS[:s3]
ensure
@service.delete key
end
+
+ test "uploading a large object in multiple parts" do
+ service = build_service(upload: { multipart_threshold: 5.megabytes })
+
+ begin
+ key = SecureRandom.base58(24)
+ data = SecureRandom.bytes(8.megabytes)
+
+ service.upload key, StringIO.new(data), checksum: Digest::MD5.base64digest(data)
+ assert data == service.download(key)
+ ensure
+ service.delete key
+ end
+ end
+
+ private
+ def build_service(configuration)
+ ActiveStorage::Service.configure :s3, SERVICE_CONFIGURATIONS.deep_merge(s3: configuration)
+ end
end
else
puts "Skipping S3 Service tests because no S3 configuration was supplied"