@@ -310,126 +310,130 @@ public void failsWhenBothBufferSizeAndDelayedAuthModeEnabled() {
310310
311311 @ Test
312312 public void customSetBufferSizeWithLargeObject () throws IOException {
313- final String objectKey = appendTestSuffix ("large-object-test-custom-buffer-size" );
313+ for (int i =0 ; i < 10 ; i ++) {
314+ final String objectKey = appendTestSuffix ("large-object-test-custom-buffer-size" );
314315
315- Security .addProvider (new BouncyCastleProvider ());
316- Provider provider = Security .getProvider ("BC" );
316+ Security .addProvider (new BouncyCastleProvider ());
317+ Provider provider = Security .getProvider ("BC" );
317318
318- // V3 Client with custom max buffer size 32 MiB.
319- S3Client v3ClientWithBuffer32MiB = S3EncryptionClient .builder ()
320- .aesKey (AES_KEY )
321- .cryptoProvider (provider )
322- .setBufferSize (32 * 1024 * 1024 )
323- .build ();
319+ // V3 Client with custom max buffer size 32 MiB.
320+ S3Client v3ClientWithBuffer32MiB = S3EncryptionClient .builder ()
321+ .aesKey (AES_KEY )
322+ .cryptoProvider (provider )
323+ .setBufferSize (32 * 1024 * 1024 )
324+ .build ();
324325
325- // V3 Client with default buffer size (i.e. 64MiB)
326- // When enableDelayedAuthenticationMode is set to true, delayed authentication mode always takes priority over buffered mode.
327- S3Client v3ClientWithDelayedAuth = S3EncryptionClient .builder ()
328- .aesKey (AES_KEY )
329- .cryptoProvider (provider )
330- .enableDelayedAuthenticationMode (true )
331- .build ();
326+ // V3 Client with default buffer size (i.e. 64MiB)
327+ // When enableDelayedAuthenticationMode is set to true, delayed authentication mode always takes priority over buffered mode.
328+ S3Client v3ClientWithDelayedAuth = S3EncryptionClient .builder ()
329+ .aesKey (AES_KEY )
330+ .cryptoProvider (provider )
331+ .enableDelayedAuthenticationMode (true )
332+ .build ();
332333
333- // Tight bound on the custom buffer size limit of 32MiB
334- final long fileSizeExceedingDefaultLimit = 1024 * 1024 * 32 + 1 ;
334+ // Tight bound on the custom buffer size limit of 32MiB
335+ final long fileSizeExceedingDefaultLimit = 1024 * 1024 * 32 + 1 ;
335336
336- byte [] data = new byte [(int ) fileSizeExceedingDefaultLimit ];
337- for (int j =0 ; j < data .length ; j ++) {
338- data [j ] = (byte ) (j % 256 );
339- }
340- final InputStream largeObjectStream = new ByteArrayInputStream (data );
341- v3ClientWithBuffer32MiB .putObject (PutObjectRequest .builder ()
342- .bucket (BUCKET )
343- .key (objectKey )
344- .build (), RequestBody .fromInputStream (largeObjectStream , fileSizeExceedingDefaultLimit ));
337+ byte [] data = new byte [(int ) fileSizeExceedingDefaultLimit ];
338+ for (int j =0 ; j < data .length ; j ++) {
339+ data [j ] = (byte ) (j % 256 );
340+ }
341+ final InputStream largeObjectStream = new ByteArrayInputStream (data );
342+ v3ClientWithBuffer32MiB .putObject (PutObjectRequest .builder ()
343+ .bucket (BUCKET )
344+ .key (objectKey )
345+ .build (), RequestBody .fromInputStream (largeObjectStream , fileSizeExceedingDefaultLimit ));
345346
346- largeObjectStream .close ();
347+ largeObjectStream .close ();
347348
348- // Object is larger than Buffer, so getObject fails
349- assertThrows (S3EncryptionClientException .class , () -> v3ClientWithBuffer32MiB .getObjectAsBytes (builder -> builder
350- .bucket (BUCKET )
351- .key (objectKey )));
349+ // Object is larger than Buffer, so getObject fails
350+ assertThrows (S3EncryptionClientException .class , () -> v3ClientWithBuffer32MiB .getObjectAsBytes (builder -> builder
351+ .bucket (BUCKET )
352+ .key (objectKey )));
352353
353- // You have to either enable the delayed auth mode or increase max buffer size (but in allowed bounds)
354- ResponseInputStream <GetObjectResponse > response = v3ClientWithDelayedAuth .getObject (builder -> builder
355- .bucket (BUCKET )
356- .key (objectKey ));
354+ // You have to either enable the delayed auth mode or increase max buffer size (but in allowed bounds)
355+ ResponseInputStream <GetObjectResponse > response = v3ClientWithDelayedAuth .getObject (builder -> builder
356+ .bucket (BUCKET )
357+ .key (objectKey ));
357358
358- // Create a new ByteArrayInputStream for comparison
359- InputStream expectedStream = new ByteArrayInputStream (data );
360- assertTrue (IOUtils .contentEquals (expectedStream , response ));
361- response .close ();
359+ // Create a new ByteArrayInputStream for comparison
360+ InputStream expectedStream = new ByteArrayInputStream (data );
361+ assertTrue (IOUtils .contentEquals (expectedStream , response ));
362+ response .close ();
362363
363- // Cleanup
364- deleteObject (BUCKET , objectKey , v3ClientWithBuffer32MiB );
365- v3ClientWithBuffer32MiB .close ();
366- v3ClientWithDelayedAuth .close ();
364+ // Cleanup
365+ deleteObject (BUCKET , objectKey , v3ClientWithBuffer32MiB );
366+ v3ClientWithBuffer32MiB .close ();
367+ v3ClientWithDelayedAuth .close ();
368+ }
367369 }
368370
369371 @ Test
370372 public void customSetBufferSizeWithLargeObjectAsyncClient () throws IOException {
371- final String objectKey = appendTestSuffix ("large-object-test-custom-buffer-size-async" );
373+ for (int i =0 ; i < 10 ; i ++) {
374+ final String objectKey = appendTestSuffix ("large-object-test-custom-buffer-size-async" );
372375
373- Security .addProvider (new BouncyCastleProvider ());
374- Provider provider = Security .getProvider ("BC" );
376+ Security .addProvider (new BouncyCastleProvider ());
377+ Provider provider = Security .getProvider ("BC" );
375378
376- // V3 Client with custom max buffer size 32 MiB.
377- S3AsyncClient v3ClientWithBuffer32MiB = S3AsyncEncryptionClient .builder ()
378- .aesKey (AES_KEY )
379- .cryptoProvider (provider )
380- .setBufferSize (32 * 1024 * 1024 )
381- .build ();
379+ // V3 Client with custom max buffer size 32 MiB.
380+ S3AsyncClient v3ClientWithBuffer32MiB = S3AsyncEncryptionClient .builder ()
381+ .aesKey (AES_KEY )
382+ .cryptoProvider (provider )
383+ .setBufferSize (32 * 1024 * 1024 )
384+ .build ();
382385
383- // V3 Client with default buffer size (i.e. 64MiB)
384- // When enableDelayedAuthenticationMode is set to true, delayed authentication mode always takes priority over buffered mode.
385- S3AsyncClient v3ClientWithDelayedAuth = S3AsyncEncryptionClient .builder ()
386- .aesKey (AES_KEY )
387- .cryptoProvider (provider )
388- .enableDelayedAuthenticationMode (true )
389- .build ();
386+ // V3 Client with default buffer size (i.e. 64MiB)
387+ // When enableDelayedAuthenticationMode is set to true, delayed authentication mode always takes priority over buffered mode.
388+ S3AsyncClient v3ClientWithDelayedAuth = S3AsyncEncryptionClient .builder ()
389+ .aesKey (AES_KEY )
390+ .cryptoProvider (provider )
391+ .enableDelayedAuthenticationMode (true )
392+ .build ();
390393
391- // Tight bound on the custom buffer size limit of 32MiB
392- final long fileSizeExceedingDefaultLimit = 1024 * 1024 * 32 + 1 ;
393- byte [] data = new byte [(int ) fileSizeExceedingDefaultLimit ];
394- for (int j =0 ; j < data .length ; j ++) {
395- data [j ] = (byte ) (j % 256 );
396- }
397- final InputStream largeObjectStream = new ByteArrayInputStream (data );
398- ExecutorService singleThreadExecutor = Executors .newSingleThreadExecutor ();
399- CompletableFuture <PutObjectResponse > futurePut = v3ClientWithBuffer32MiB .putObject (PutObjectRequest .builder ()
400- .bucket (BUCKET )
401- .key (objectKey )
402- .build (), AsyncRequestBody .fromInputStream (largeObjectStream , fileSizeExceedingDefaultLimit , singleThreadExecutor ));
394+ // Tight bound on the custom buffer size limit of 32MiB
395+ final long fileSizeExceedingDefaultLimit = 1024 * 1024 * 32 + 1 ;
396+ byte [] data = new byte [(int ) fileSizeExceedingDefaultLimit ];
397+ for (int j =0 ; j < data .length ; j ++) {
398+ data [j ] = (byte ) (j % 256 );
399+ }
400+ final InputStream largeObjectStream = new ByteArrayInputStream (data );
401+ ExecutorService singleThreadExecutor = Executors .newSingleThreadExecutor ();
402+ CompletableFuture <PutObjectResponse > futurePut = v3ClientWithBuffer32MiB .putObject (PutObjectRequest .builder ()
403+ .bucket (BUCKET )
404+ .key (objectKey )
405+ .build (), AsyncRequestBody .fromInputStream (largeObjectStream , fileSizeExceedingDefaultLimit , singleThreadExecutor ));
403406
404- futurePut .join ();
405- largeObjectStream .close ();
406- singleThreadExecutor .shutdown ();
407+ futurePut .join ();
408+ largeObjectStream .close ();
409+ singleThreadExecutor .shutdown ();
407410
408- try {
409- // Object is larger than Buffer, so getObject fails
410- CompletableFuture <ResponseInputStream <GetObjectResponse >> futureResponse = v3ClientWithBuffer32MiB .getObject (builder -> builder
411+ try {
412+ // Object is larger than Buffer, so getObject fails
413+ CompletableFuture <ResponseInputStream <GetObjectResponse >> futureResponse = v3ClientWithBuffer32MiB .getObject (builder -> builder
414+ .bucket (BUCKET )
415+ .key (objectKey ), AsyncResponseTransformer .toBlockingInputStream ());
416+ futureResponse .join ();
417+ } catch (CompletionException e ) {
418+ assertEquals (S3EncryptionClientException .class , e .getCause ().getClass ());
419+ }
420+
421+ // You have to either enable the delayed auth mode or increase max buffer size (but in allowed bounds)
422+ CompletableFuture <ResponseInputStream <GetObjectResponse >> futureGet = v3ClientWithDelayedAuth .getObject (builder -> builder
411423 .bucket (BUCKET )
412424 .key (objectKey ), AsyncResponseTransformer .toBlockingInputStream ());
413- futureResponse .join ();
414- } catch (CompletionException e ) {
415- assertEquals (S3EncryptionClientException .class , e .getCause ().getClass ());
416- }
425+ ResponseInputStream <GetObjectResponse > output = futureGet .join ();
417426
418- // You have to either enable the delayed auth mode or increase max buffer size (but in allowed bounds)
419- CompletableFuture <ResponseInputStream <GetObjectResponse >> futureGet = v3ClientWithDelayedAuth .getObject (builder -> builder
420- .bucket (BUCKET )
421- .key (objectKey ), AsyncResponseTransformer .toBlockingInputStream ());
422- ResponseInputStream <GetObjectResponse > output = futureGet .join ();
427+ ByteArrayInputStream expectedStream = new ByteArrayInputStream (data );
428+ assertTrue (IOUtils .contentEquals (expectedStream , output ));
423429
424- ByteArrayInputStream expectedStream = new ByteArrayInputStream (data );
425- assertTrue (IOUtils .contentEquals (expectedStream , output ));
430+ output .close ();
426431
427- output .close ();
428-
429- // Cleanup
430- deleteObject (BUCKET , objectKey , v3ClientWithBuffer32MiB );
431- v3ClientWithBuffer32MiB .close ();
432- v3ClientWithDelayedAuth .close ();
432+ // Cleanup
433+ deleteObject (BUCKET , objectKey , v3ClientWithBuffer32MiB );
434+ v3ClientWithBuffer32MiB .close ();
435+ v3ClientWithDelayedAuth .close ();
436+ }
433437 }
434438
435439 @ Test
0 commit comments