23
23
import static software .amazon .awssdk .services .s3 .internal .crossregion .S3DecoratorRedirectBaseTest .X_AMZ_BUCKET_REGION ;
24
24
25
25
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 ;
26
31
import org .junit .jupiter .api .BeforeEach ;
27
32
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 ;
28
36
import software .amazon .awssdk .core .interceptor .Context ;
29
37
import software .amazon .awssdk .core .interceptor .ExecutionAttributes ;
30
38
import software .amazon .awssdk .core .interceptor .ExecutionInterceptor ;
35
43
import software .amazon .awssdk .http .SdkHttpResponse ;
36
44
import software .amazon .awssdk .services .s3 .S3Client ;
37
45
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 ;
38
48
import software .amazon .awssdk .services .s3 .internal .crossregion .endpointprovider .BucketEndpointProvider ;
39
49
import software .amazon .awssdk .services .s3 .model .GetObjectRequest ;
40
50
import software .amazon .awssdk .services .s3 .model .ListObjectsV2Response ;
44
54
45
55
class S3CrossRegionSyncClientTest {
46
56
47
- private static final String RESPONSE = "<Res>response</Res>" ;
48
57
private static final String BUCKET = "bucket" ;
49
58
private static final String KEY = "key" ;
50
59
private static final String TOKEN = "token" ;
@@ -55,54 +64,69 @@ class S3CrossRegionSyncClientTest {
55
64
56
65
@ BeforeEach
57
66
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
-
64
67
captureInterceptor = new CaptureInterceptor ();
65
68
defaultS3Client = clientBuilder ().build ();
66
69
}
67
70
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 );
71
89
S3Client crossRegionClient = new S3CrossRegionSyncClient (defaultS3Client );
72
90
crossRegionClient .getObject (r -> r .bucket (BUCKET ).key (KEY ));
73
- assertThat (captureInterceptor .endpointProvider ).isInstanceOf (BucketEndpointProvider . class );
91
+ assertThat (captureInterceptor .endpointProvider ).isInstanceOf (endpointProviderType );
74
92
}
75
93
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 );
79
99
S3Client crossRegionClient = new S3CrossRegionSyncClient (defaultS3Client );
80
100
GetObjectRequest request = GetObjectRequest .builder ()
81
101
.bucket (BUCKET )
82
102
.key (KEY )
83
103
.overrideConfiguration (o -> o .putHeader ("someheader" , "somevalue" ))
84
104
.build ();
85
105
crossRegionClient .getObject (request );
86
- assertThat (captureInterceptor .endpointProvider ).isInstanceOf (BucketEndpointProvider . class );
106
+ assertThat (captureInterceptor .endpointProvider ).isInstanceOf (endpointProviderType );
87
107
assertThat (mockSyncHttpClient .getLastRequest ().headers ().get ("someheader" )).isNotNull ();
88
108
}
89
109
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 );
93
115
S3Client crossRegionClient = new S3CrossRegionSyncClient (defaultS3Client );
94
116
ListObjectsV2Iterable iterable =
95
117
crossRegionClient .listObjectsV2Paginator (r -> r .bucket (BUCKET ).continuationToken (TOKEN ).build ());
96
118
iterable .forEach (ListObjectsV2Response ::contents );
97
- assertThat (captureInterceptor .endpointProvider ).isInstanceOf (BucketEndpointProvider . class );
119
+ assertThat (captureInterceptor .endpointProvider ).isInstanceOf (endpointProviderType );
98
120
}
99
121
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 );
103
127
S3Client crossRegionClient = clientBuilder ().serviceConfiguration (c -> c .crossRegionAccessEnabled (true )).build ();
104
128
crossRegionClient .getObject (r -> r .bucket (BUCKET ).key (KEY ));
105
- assertThat (captureInterceptor .endpointProvider ).isInstanceOf (BucketEndpointProvider . class );
129
+ assertThat (captureInterceptor .endpointProvider ).isInstanceOf (endpointProviderType );
106
130
}
107
131
108
132
private S3ClientBuilder clientBuilder () {
0 commit comments