diff options
author | George Claghorn <george@basecamp.com> | 2019-05-16 10:58:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-16 10:58:33 -0400 |
commit | 9c5135ce6a10c8318e25a587620c8cde4563f348 (patch) | |
tree | 11e6ed9800b9bf401e02515607d1861092e31c78 /activestorage/test | |
parent | c8396e030f4b1edd48340975696dcaf6aa8291c9 (diff) | |
download | rails-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.rb | 22 |
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" |