Skip to content

Commit 1822c54

Browse files
committed
Handled CR comments to take care of retries thus captureInterceptor is removed
1 parent ed3d68d commit 1822c54

File tree

6 files changed

+161
-196
lines changed

6 files changed

+161
-196
lines changed

services/s3/src/it/java/software/amazon/awssdk/services/s3/crossregion/CaptureInterceptor.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

services/s3/src/it/java/software/amazon/awssdk/services/s3/crossregion/S3AsyncCrossRegionIntegrationTest.java

Lines changed: 10 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,96 +17,31 @@
1717

1818
import static software.amazon.awssdk.testutils.service.S3BucketUtils.temporaryBucketName;
1919

20-
import java.util.ArrayList;
21-
import java.util.List;
22-
import java.util.concurrent.CompletableFuture;
2320
import org.junit.jupiter.api.AfterAll;
24-
import org.junit.jupiter.api.AfterEach;
2521
import org.junit.jupiter.api.BeforeAll;
2622
import org.junit.jupiter.api.BeforeEach;
27-
import software.amazon.awssdk.core.ResponseBytes;
28-
import software.amazon.awssdk.core.async.AsyncRequestBody;
29-
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
3023
import software.amazon.awssdk.services.s3.S3AsyncClient;
31-
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
32-
import software.amazon.awssdk.services.s3.model.DeleteObjectResponse;
33-
import software.amazon.awssdk.services.s3.model.DeleteObjectsRequest;
34-
import software.amazon.awssdk.services.s3.model.DeleteObjectsResponse;
35-
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
36-
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
37-
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
38-
import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
39-
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
40-
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
41-
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
42-
import software.amazon.awssdk.services.s3.model.S3Object;
43-
import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Publisher;
4424

45-
public class S3AsyncCrossRegionIntegrationTest extends S3CrossRegionIntegrationTestBase {
46-
private S3AsyncClient crossRegionS3Client ;
47-
48-
@BeforeEach
49-
public void initialize() {
50-
captureInterceptor = new CaptureInterceptor();
51-
crossRegionS3Client = S3AsyncClient.builder()
52-
.region(CROSS_REGION)
53-
.serviceConfiguration(s -> s.crossRegionAccessEnabled(true))
54-
.overrideConfiguration(o -> o.addExecutionInterceptor(captureInterceptor))
55-
.build();
56-
}
25+
public class S3AsyncCrossRegionIntegrationTest extends S3AsyncCrossRegionIntegrationTestBase {
26+
private static final String BUCKET = temporaryBucketName(S3AsyncCrossRegionIntegrationTest.class);
5727

58-
@AfterEach
59-
void reset(){
60-
captureInterceptor.reset();
61-
}
6228
@BeforeAll
63-
static void setUpClass(){
64-
// Bucket Created in CROSS Region
29+
static void setUpClass() {
6530
s3 = s3ClientBuilder().build();
6631
createBucket(BUCKET);
6732
}
6833

6934
@AfterAll
70-
static void clearClass(){
35+
static void clearClass() {
7136
deleteBucketAndAllContents(BUCKET);
7237
}
7338

74-
private static final String BUCKET = temporaryBucketName(S3AsyncCrossRegionIntegrationTest.class);
75-
76-
@Override
77-
protected List<S3Object> paginatedAPICall(ListObjectsV2Request listObjectsV2Request) {
78-
List<S3Object> resultObjects = new ArrayList<>();
79-
ListObjectsV2Publisher publisher = crossRegionS3Client.listObjectsV2Paginator(listObjectsV2Request);
80-
CompletableFuture<Void> subscribe = publisher.subscribe(response -> {
81-
response.contents().forEach(a -> resultObjects.add(a));
82-
});
83-
subscribe.join();
84-
return resultObjects;
85-
}
86-
87-
@Override
88-
protected DeleteObjectsResponse postObjectAPICall(DeleteObjectsRequest deleteObjectsRequest) {
89-
return crossRegionS3Client.deleteObjects(deleteObjectsRequest).join();
90-
}
91-
92-
@Override
93-
protected HeadBucketResponse headAPICall(HeadBucketRequest headBucketRequest) {
94-
return crossRegionS3Client.headBucket(headBucketRequest).join();
95-
}
96-
97-
@Override
98-
protected DeleteObjectResponse deleteObjectAPICall(DeleteObjectRequest deleteObjectRequest) {
99-
return crossRegionS3Client.deleteObject(deleteObjectRequest).join();
100-
}
101-
102-
@Override
103-
protected PutObjectResponse putAPICall(PutObjectRequest putObjectRequest, String testString) {
104-
return crossRegionS3Client.putObject(putObjectRequest, AsyncRequestBody.fromString(testString)).join();
105-
}
106-
107-
@Override
108-
protected ResponseBytes<GetObjectResponse> getAPICall(GetObjectRequest getObjectRequest) {
109-
return crossRegionS3Client.getObject(getObjectRequest, AsyncResponseTransformer.toBytes()).join();
39+
@BeforeEach
40+
public void initialize() {
41+
crossRegionS3Client = S3AsyncClient.builder()
42+
.region(CROSS_REGION)
43+
.serviceConfiguration(s -> s.crossRegionAccessEnabled(true))
44+
.build();
11045
}
11146

11247
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.services.s3.crossregion;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
import java.util.concurrent.CompletableFuture;
21+
import software.amazon.awssdk.core.ResponseBytes;
22+
import software.amazon.awssdk.core.async.AsyncRequestBody;
23+
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
24+
import software.amazon.awssdk.services.s3.S3AsyncClient;
25+
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
26+
import software.amazon.awssdk.services.s3.model.DeleteObjectResponse;
27+
import software.amazon.awssdk.services.s3.model.DeleteObjectsRequest;
28+
import software.amazon.awssdk.services.s3.model.DeleteObjectsResponse;
29+
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
30+
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
31+
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
32+
import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
33+
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
34+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
35+
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
36+
import software.amazon.awssdk.services.s3.model.S3Object;
37+
import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Publisher;
38+
39+
public abstract class S3AsyncCrossRegionIntegrationTestBase extends S3CrossRegionIntegrationTestBase{
40+
protected S3AsyncClient crossRegionS3Client;
41+
42+
@Override
43+
protected List<S3Object> paginatedAPICall(ListObjectsV2Request listObjectsV2Request) {
44+
List<S3Object> resultObjects = new ArrayList<>();
45+
ListObjectsV2Publisher publisher = crossRegionS3Client.listObjectsV2Paginator(listObjectsV2Request);
46+
CompletableFuture<Void> subscribe = publisher.subscribe(response -> {
47+
response.contents().forEach(a -> resultObjects.add(a));
48+
});
49+
subscribe.join();
50+
return resultObjects;
51+
}
52+
53+
@Override
54+
protected DeleteObjectsResponse postObjectAPICall(DeleteObjectsRequest deleteObjectsRequest) {
55+
return crossRegionS3Client.deleteObjects(deleteObjectsRequest).join();
56+
}
57+
58+
@Override
59+
protected HeadBucketResponse headAPICall(HeadBucketRequest headBucketRequest) {
60+
return crossRegionS3Client.headBucket(headBucketRequest).join();
61+
}
62+
63+
@Override
64+
protected DeleteObjectResponse deleteObjectAPICall(DeleteObjectRequest deleteObjectRequest) {
65+
return crossRegionS3Client.deleteObject(deleteObjectRequest).join();
66+
}
67+
68+
@Override
69+
protected PutObjectResponse putAPICall(PutObjectRequest putObjectRequest, String testString) {
70+
return crossRegionS3Client.putObject(putObjectRequest, AsyncRequestBody.fromString(testString)).join();
71+
}
72+
73+
@Override
74+
protected ResponseBytes<GetObjectResponse> getAPICall(GetObjectRequest getObjectRequest) {
75+
return crossRegionS3Client.getObject(getObjectRequest, AsyncResponseTransformer.toBytes()).join();
76+
}
77+
}

services/s3/src/it/java/software/amazon/awssdk/services/s3/crossregion/S3CrossRegionIntegrationTestBase.java

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
1919

20-
import java.util.Arrays;
2120
import java.util.List;
22-
import java.util.stream.Collectors;
2321
import java.util.stream.IntStream;
2422
import org.junit.jupiter.api.Test;
2523
import software.amazon.awssdk.core.ResponseBytes;
2624
import software.amazon.awssdk.core.sync.RequestBody;
27-
import software.amazon.awssdk.http.SdkHttpMethod;
2825
import software.amazon.awssdk.regions.Region;
2926
import software.amazon.awssdk.services.s3.S3IntegrationTestBase;
3027
import software.amazon.awssdk.services.s3.model.ChecksumAlgorithm;
@@ -50,20 +47,14 @@ public abstract class S3CrossRegionIntegrationTestBase extends S3IntegrationTest
5047

5148
private static final String KEY = "key";
5249

53-
protected CaptureInterceptor captureInterceptor;
54-
5550
@Test
5651
void getApi_CrossRegionCall() {
5752
s3.putObject(p -> p.bucket(bucketName()).checksumAlgorithm(ChecksumAlgorithm.CRC32).key(KEY), RequestBody.fromString(
5853
"TEST_STRING"));
5954
GetObjectRequest getObjectRequest =
6055
GetObjectRequest.builder().bucket(bucketName()).checksumMode(ChecksumMode.ENABLED).key(KEY).build();
6156
ResponseBytes<GetObjectResponse> response = getAPICall(getObjectRequest);
62-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
63-
DEFAULT_REGION.id()));
64-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.GET, SdkHttpMethod.GET));
6557
assertThat(new String(response.asByteArray())).isEqualTo("TEST_STRING");
66-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(2);
6758
}
6859

6960
@Test
@@ -73,11 +64,7 @@ void putApi_CrossRegionCall() {
7364
PutObjectRequest putObjectRequest =
7465
PutObjectRequest.builder().bucket(bucketName()).checksumAlgorithm(ChecksumAlgorithm.CRC32).key(KEY).build();
7566
PutObjectResponse response = putAPICall(putObjectRequest, "TEST_STRING");
76-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
77-
DEFAULT_REGION.id()));
78-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.PUT, SdkHttpMethod.PUT));
7967
assertThat(response.checksumCRC32()).isEqualTo("S9ke8w==");
80-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(2);
8168
}
8269

8370
@Test
@@ -86,11 +73,8 @@ void deleteApi_CrossRegionCall() {
8673
"TEST_STRING"));
8774
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName()).key(KEY).build();
8875
DeleteObjectResponse response = deleteObjectAPICall(deleteObjectRequest);
89-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
90-
DEFAULT_REGION.id()));
91-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.DELETE, SdkHttpMethod.DELETE));
76+
System.out.println(response);
9277
assertThat(response).isNotNull();
93-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(2);
9478
}
9579

9680
@Test
@@ -102,25 +86,18 @@ void postApi_CrossRegionCall() {
10286
DeleteObjectsRequest deleteObjectsRequest =
10387
DeleteObjectsRequest.builder().bucket(bucketName()).delete(d -> d.objects(o -> o.key(KEY), o -> o.key(KEY + "_1"))).build();
10488
DeleteObjectsResponse response = postObjectAPICall(deleteObjectsRequest);
105-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
106-
DEFAULT_REGION.id()));
107-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.POST, SdkHttpMethod.POST));
10889
assertThat(response).isNotNull();
109-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(2);
90+
System.out.println(response);
11091
}
11192

11293
@Test
11394
void cachedRegionGetsUsed_when_CrossRegionCall() {
11495
putAPICall(PutObjectRequest.builder().bucket(bucketName()).checksumAlgorithm(ChecksumAlgorithm.CRC32).key(KEY).build(),
11596
"TEST_STRING");
116-
getAPICall(GetObjectRequest.builder().bucket(bucketName()).checksumMode(ChecksumMode.ENABLED).key(KEY).build());
117-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
118-
DEFAULT_REGION.id(),
119-
DEFAULT_REGION.id()));
120-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.PUT,
121-
SdkHttpMethod.PUT,
122-
SdkHttpMethod.GET));
123-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(3);
97+
GetObjectRequest getObjectRequest =
98+
GetObjectRequest.builder().bucket(bucketName()).checksumMode(ChecksumMode.ENABLED).key(KEY).build();
99+
ResponseBytes<GetObjectResponse> response = getAPICall(getObjectRequest);
100+
assertThat(new String(response.asByteArray())).isEqualTo("TEST_STRING");
124101
}
125102

126103
@Test
@@ -136,10 +113,7 @@ void paginatedApi_CrossRegionCall() {
136113
);
137114
ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucketName()).maxKeys(maxKeys).build();
138115
List<S3Object> s3ObjectList = paginatedAPICall(listObjectsV2Request);
139-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
140-
DEFAULT_REGION.id(),
141-
DEFAULT_REGION.id()));
142-
116+
assertThat(s3ObjectList).hasSize(totalKeys);
143117
IntStream.range(0, totalKeys ).forEach(i -> s3.deleteObject(p -> p.bucket(bucketName()).key(KEY + "_" + i)));
144118
}
145119

@@ -149,11 +123,8 @@ void headApi_CrossRegionCall() {
149123
"TEST_STRING"));
150124
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder().bucket(bucketName()).build();
151125
HeadBucketResponse response = headAPICall(headBucketRequest);
152-
assertThat(regionsIntercepted(captureInterceptor.hosts())).isEqualTo(Arrays.asList(CROSS_REGION.id(),
153-
DEFAULT_REGION.id()));
154-
assertThat(captureInterceptor.httpMethods()).isEqualTo(Arrays.asList(SdkHttpMethod.HEAD, SdkHttpMethod.HEAD));
155126
assertThat(response).isNotNull();
156-
assertThat(captureInterceptor.getServiceCalls()).isEqualTo(2);
127+
System.out.println(response);
157128
}
158129

159130
protected abstract List<S3Object> paginatedAPICall(ListObjectsV2Request listObjectsV2Request);
@@ -170,10 +141,4 @@ void headApi_CrossRegionCall() {
170141

171142
protected abstract String bucketName();
172143

173-
private List<String> regionsIntercepted(List<String> hosts) {
174-
return hosts.stream()
175-
.map(req -> req.substring(bucketName().length() + 4, req.length() - 14))
176-
.collect(Collectors.toList());
177-
}
178-
179144
}

0 commit comments

Comments
 (0)