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..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 @@ -177,29 +177,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)))); + } }