Skip to content

Commit 72c74fa

Browse files
committed
Added paramterized test
1 parent 02db0d9 commit 72c74fa

File tree

2 files changed

+89
-40
lines changed

2 files changed

+89
-40
lines changed

services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/crossregion/S3CrossRegionAsyncClientTest.java

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@
2121

2222
import java.net.URI;
2323
import java.util.concurrent.CompletableFuture;
24+
import java.util.function.Consumer;
25+
import java.util.stream.Stream;
2426
import org.junit.jupiter.api.BeforeEach;
2527
import org.junit.jupiter.api.Test;
28+
import org.junit.jupiter.params.ParameterizedTest;
29+
import org.junit.jupiter.params.provider.Arguments;
30+
import org.junit.jupiter.params.provider.MethodSource;
2631
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
2732
import software.amazon.awssdk.core.interceptor.Context;
2833
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
@@ -35,7 +40,6 @@
3540
import software.amazon.awssdk.http.SdkHttpResponse;
3641
import software.amazon.awssdk.services.s3.S3AsyncClient;
3742
import software.amazon.awssdk.services.s3.S3AsyncClientBuilder;
38-
import software.amazon.awssdk.services.s3.S3Client;
3943
import software.amazon.awssdk.services.s3.endpoints.internal.DefaultS3EndpointProvider;
4044
import software.amazon.awssdk.services.s3.internal.crossregion.endpointprovider.BucketEndpointProvider;
4145
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
@@ -62,45 +66,66 @@ void before() {
6266
s3Client = clientBuilder().build();
6367
}
6468

65-
@Test
66-
void standardOp_crossRegionClient_noOverrideConfig_SuccessfullyIntercepts() {
67-
mockAsyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
69+
public static Stream<Arguments> stubResponses() {
70+
Consumer<MockAsyncHttpClient> redirectStubConsumer = mockSyncHttpClient ->
71+
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
72+
73+
Consumer<MockAsyncHttpClient> successStubConsumer = mockSyncHttpClient ->
74+
mockSyncHttpClient.stubResponses(successHttpResponse(), successHttpResponse());
75+
76+
return Stream.of(
77+
Arguments.of(redirectStubConsumer, BucketEndpointProvider.class),
78+
Arguments.of(successStubConsumer, DefaultS3EndpointProvider.class)
79+
);
80+
}
81+
82+
@ParameterizedTest
83+
@MethodSource("stubResponses")
84+
void standardOp_crossRegionClient_noOverrideConfig_SuccessfullyIntercepts(Consumer<MockAsyncHttpClient> stubConsumer,
85+
Class<?> endpointProviderType) {
86+
stubConsumer.accept(mockAsyncHttpClient);
6887
S3AsyncClient crossRegionClient = new S3CrossRegionAsyncClient(s3Client);
6988
crossRegionClient.getObject(r -> r.bucket(BUCKET).key(KEY), AsyncResponseTransformer.toBytes()).join();
70-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
89+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
7190
}
7291

73-
@Test
74-
void standardOp_crossRegionClient_existingOverrideConfig_SuccessfullyIntercepts() {
75-
mockAsyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
92+
@ParameterizedTest
93+
@MethodSource("stubResponses")
94+
void standardOp_crossRegionClient_existingOverrideConfig_SuccessfullyIntercepts(Consumer<MockAsyncHttpClient> stubConsumer,
95+
Class<?> endpointProviderType) {
96+
stubConsumer.accept(mockAsyncHttpClient);
7697
S3AsyncClient crossRegionClient = new S3CrossRegionAsyncClient(s3Client);
7798
GetObjectRequest request = GetObjectRequest.builder()
7899
.bucket(BUCKET)
79100
.key(KEY)
80101
.overrideConfiguration(o -> o.putHeader("someheader", "somevalue"))
81102
.build();
82103
crossRegionClient.getObject(request, AsyncResponseTransformer.toBytes()).join();
83-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
104+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
84105
assertThat(mockAsyncHttpClient.getLastRequest().headers().get("someheader")).isNotNull();
85106
}
86107

87-
@Test
88-
void paginatedOp_crossRegionClient_DoesIntercept() throws Exception {
89-
mockAsyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
108+
@ParameterizedTest
109+
@MethodSource("stubResponses")
110+
void paginatedOp_crossRegionClient_DoesIntercept(Consumer<MockAsyncHttpClient> stubConsumer,
111+
Class<?> endpointProviderType) throws Exception {
112+
stubConsumer.accept(mockAsyncHttpClient);
90113
S3AsyncClient crossRegionClient = new S3CrossRegionAsyncClient(s3Client);
91114
ListObjectsV2Publisher publisher =
92115
crossRegionClient.listObjectsV2Paginator(r -> r.bucket(BUCKET).continuationToken(TOKEN).build());
93116
CompletableFuture<Void> future = publisher.subscribe(ListObjectsV2Response::contents);
94117
future.get();
95-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
118+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
96119
}
97120

98-
@Test
99-
void crossRegionClient_createdWithWrapping_SuccessfullyIntercepts() {
100-
mockAsyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
121+
@ParameterizedTest
122+
@MethodSource("stubResponses")
123+
void crossRegionClient_createdWithWrapping_SuccessfullyIntercepts(Consumer<MockAsyncHttpClient> stubConsumer,
124+
Class<?> endpointProviderType) {
125+
stubConsumer.accept(mockAsyncHttpClient);
101126
S3AsyncClient crossRegionClient = clientBuilder().serviceConfiguration(c -> c.crossRegionAccessEnabled(true)).build();
102127
crossRegionClient.getObject(r -> r.bucket(BUCKET).key(KEY), AsyncResponseTransformer.toBytes()).join();
103-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
128+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
104129
}
105130

106131
private S3AsyncClientBuilder clientBuilder() {

services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/crossregion/S3CrossRegionSyncClientTest.java

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,16 @@
2323
import static software.amazon.awssdk.services.s3.internal.crossregion.S3DecoratorRedirectBaseTest.X_AMZ_BUCKET_REGION;
2424

2525
import java.net.URI;
26+
import java.util.Arrays;
27+
import java.util.List;
28+
import java.util.function.Consumer;
29+
import java.util.function.Supplier;
30+
import java.util.stream.Stream;
2631
import org.junit.jupiter.api.BeforeEach;
2732
import org.junit.jupiter.api.Test;
33+
import org.junit.jupiter.params.ParameterizedTest;
34+
import org.junit.jupiter.params.provider.Arguments;
35+
import org.junit.jupiter.params.provider.MethodSource;
2836
import software.amazon.awssdk.core.interceptor.Context;
2937
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
3038
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
@@ -35,6 +43,8 @@
3543
import software.amazon.awssdk.http.SdkHttpResponse;
3644
import software.amazon.awssdk.services.s3.S3Client;
3745
import software.amazon.awssdk.services.s3.S3ClientBuilder;
46+
import software.amazon.awssdk.services.s3.endpoints.S3EndpointProvider;
47+
import software.amazon.awssdk.services.s3.endpoints.internal.DefaultS3EndpointProvider;
3848
import software.amazon.awssdk.services.s3.internal.crossregion.endpointprovider.BucketEndpointProvider;
3949
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
4050
import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
@@ -44,7 +54,6 @@
4454

4555
class S3CrossRegionSyncClientTest {
4656

47-
private static final String RESPONSE = "<Res>response</Res>";
4857
private static final String BUCKET = "bucket";
4958
private static final String KEY = "key";
5059
private static final String TOKEN = "token";
@@ -55,54 +64,69 @@ class S3CrossRegionSyncClientTest {
5564

5665
@BeforeEach
5766
void before() {
58-
mockSyncHttpClient.stubNextResponse(
59-
HttpExecuteResponse.builder()
60-
.response(SdkHttpResponse.builder().statusCode(200).build())
61-
.responseBody(AbortableInputStream.create(new StringInputStream(RESPONSE)))
62-
.build());
63-
6467
captureInterceptor = new CaptureInterceptor();
6568
defaultS3Client = clientBuilder().build();
6669
}
6770

68-
@Test
69-
void standardOp_crossRegionClient_noOverrideConfig_SuccessfullyIntercepts() {
70-
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
71+
private static Stream<Arguments> stubResponses() {
72+
Consumer<MockSyncHttpClient> redirectStubConsumer = mockSyncHttpClient ->
73+
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
74+
75+
Consumer<MockSyncHttpClient> successStubConsumer = mockSyncHttpClient ->
76+
mockSyncHttpClient.stubResponses(successHttpResponse(), successHttpResponse());
77+
78+
return Stream.of(
79+
Arguments.of(redirectStubConsumer, BucketEndpointProvider.class),
80+
Arguments.of(successStubConsumer, DefaultS3EndpointProvider.class)
81+
);
82+
}
83+
84+
@ParameterizedTest
85+
@MethodSource("stubResponses")
86+
void standardOp_crossRegionClient_noOverrideConfig_SuccessfullyIntercepts(Consumer<MockSyncHttpClient> stubConsumer,
87+
Class<?> endpointProviderType) {
88+
stubConsumer.accept(mockSyncHttpClient);
7189
S3Client crossRegionClient = new S3CrossRegionSyncClient(defaultS3Client);
7290
crossRegionClient.getObject(r -> r.bucket(BUCKET).key(KEY));
73-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
91+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
7492
}
7593

76-
@Test
77-
void standardOp_crossRegionClient_existingOverrideConfig_SuccessfullyIntercepts() {
78-
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
94+
@ParameterizedTest
95+
@MethodSource("stubResponses")
96+
void standardOp_crossRegionClient_existingOverrideConfig_SuccessfullyIntercepts(Consumer<MockSyncHttpClient> stubConsumer,
97+
Class<?> endpointProviderType) {
98+
stubConsumer.accept(mockSyncHttpClient);
7999
S3Client crossRegionClient = new S3CrossRegionSyncClient(defaultS3Client);
80100
GetObjectRequest request = GetObjectRequest.builder()
81101
.bucket(BUCKET)
82102
.key(KEY)
83103
.overrideConfiguration(o -> o.putHeader("someheader", "somevalue"))
84104
.build();
85105
crossRegionClient.getObject(request);
86-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
106+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
87107
assertThat(mockSyncHttpClient.getLastRequest().headers().get("someheader")).isNotNull();
88108
}
89109

90-
@Test
91-
void paginatedOp_crossRegionClient_DoesNotIntercept() {
92-
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
110+
@ParameterizedTest
111+
@MethodSource("stubResponses")
112+
void paginatedOp_crossRegionClient_DoesNotIntercept(Consumer<MockSyncHttpClient> stubConsumer,
113+
Class<?> endpointProviderType) {
114+
stubConsumer.accept(mockSyncHttpClient);
93115
S3Client crossRegionClient = new S3CrossRegionSyncClient(defaultS3Client);
94116
ListObjectsV2Iterable iterable =
95117
crossRegionClient.listObjectsV2Paginator(r -> r.bucket(BUCKET).continuationToken(TOKEN).build());
96118
iterable.forEach(ListObjectsV2Response::contents);
97-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
119+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
98120
}
99121

100-
@Test
101-
void crossRegionClient_createdWithWrapping_SuccessfullyIntercepts() {
102-
mockSyncHttpClient.stubResponses(customHttpResponse(301, CROSS_REGION), successHttpResponse());
122+
@ParameterizedTest
123+
@MethodSource("stubResponses")
124+
void crossRegionClient_createdWithWrapping_SuccessfullyIntercepts(Consumer<MockSyncHttpClient> stubConsumer,
125+
Class<?> endpointProviderType) {
126+
stubConsumer.accept(mockSyncHttpClient);
103127
S3Client crossRegionClient = clientBuilder().serviceConfiguration(c -> c.crossRegionAccessEnabled(true)).build();
104128
crossRegionClient.getObject(r -> r.bucket(BUCKET).key(KEY));
105-
assertThat(captureInterceptor.endpointProvider).isInstanceOf(BucketEndpointProvider.class);
129+
assertThat(captureInterceptor.endpointProvider).isInstanceOf(endpointProviderType);
106130
}
107131

108132
private S3ClientBuilder clientBuilder() {

0 commit comments

Comments
 (0)