From add089a17fd7ea603a4b932ad39bbd0675f518c2 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:31:52 -0700 Subject: [PATCH 1/2] Add retry --- ...3MultipartClientPutObjectWiremockTest.java | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java index 859f5aebacac..d887b562637e 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java @@ -62,6 +62,7 @@ import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.PutObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; +import software.amazon.awssdk.testutils.retry.RetryableTest; @WireMockTest @Timeout(120) @@ -177,29 +178,36 @@ public void subscribe(Subscriber s) { void mpuDefaultSplitImpl_partsFailOfRetryableError_shouldFail(String description, Long contentLength, ResponseDefinitionBuilder responseDefinitionBuilder) { - stubUploadPartFailsInitialAttemptSucceedsUponRetryCalls(responseDefinitionBuilder); - List buffers = new ArrayList<>(); - buffers.add(SdkBytes.fromUtf8String(RandomStringUtils.randomAscii(10)).asByteBuffer()); - buffers.add(SdkBytes.fromUtf8String(RandomStringUtils.randomAscii(10)).asByteBuffer()); - AsyncRequestBody asyncRequestBody = new AsyncRequestBody() { - @Override - public Optional contentLength() { - return Optional.ofNullable(contentLength); + for (int i = 0; i < 3; i++) { + try { + stubUploadPartFailsInitialAttemptSucceedsUponRetryCalls(responseDefinitionBuilder); + List buffers = new ArrayList<>(); + buffers.add(SdkBytes.fromUtf8String(RandomStringUtils.randomAscii(10)).asByteBuffer()); + buffers.add(SdkBytes.fromUtf8String(RandomStringUtils.randomAscii(10)).asByteBuffer()); + AsyncRequestBody asyncRequestBody = new AsyncRequestBody() { + @Override + public Optional contentLength() { + return Optional.ofNullable(contentLength); + } + + @Override + public void subscribe(Subscriber s) { + Flowable.fromIterable(buffers).subscribe(s); + } + }; + + assertThatThrownBy(() -> s3AsyncClient.putObject(b -> b.bucket(BUCKET).key(KEY), asyncRequestBody) + .join()) + .hasCauseInstanceOf(NonRetryableException.class) + .hasMessageContaining("Multiple subscribers detected."); + + verify(1, putRequestedFor(anyUrl()).withQueryParam("partNumber", matching(String.valueOf(1)))); + verify(1, putRequestedFor(anyUrl()).withQueryParam("partNumber", matching(String.valueOf(1)))); + return; + } catch (AssertionError e) { + if (i == 2) throw e; } - - @Override - public void subscribe(Subscriber s) { - Flowable.fromIterable(buffers).subscribe(s); - } - }; - - assertThatThrownBy(() -> s3AsyncClient.putObject(b -> b.bucket(BUCKET).key(KEY), asyncRequestBody) - .join()) - .hasCauseInstanceOf(NonRetryableException.class) - .hasMessageContaining("Multiple subscribers detected."); - - verify(1, putRequestedFor(anyUrl()).withQueryParam("partNumber", matching(String.valueOf(1)))); - verify(1, putRequestedFor(anyUrl()).withQueryParam("partNumber", matching(String.valueOf(1)))); + } } From 9ed1ea256b05626616f3cfe3b74fc2e178d83cc4 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Mon, 22 Sep 2025 00:09:05 -0700 Subject: [PATCH 2/2] Remove unused import --- .../multipart/S3MultipartClientPutObjectWiremockTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java index d887b562637e..b076dd377bf8 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/multipart/S3MultipartClientPutObjectWiremockTest.java @@ -62,7 +62,6 @@ import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.PutObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; -import software.amazon.awssdk.testutils.retry.RetryableTest; @WireMockTest @Timeout(120)