Skip to content

Commit d7436c0

Browse files
committed
Add test for abortMultipartUpload
1 parent e17887c commit d7436c0

File tree

2 files changed

+91
-17
lines changed

2 files changed

+91
-17
lines changed

services/s3/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,10 @@
8181
<version>${awsjavasdk.version}</version>
8282
<scope>test</scope>
8383
</dependency>
84+
<dependency>
85+
<groupId>org.apache.commons</groupId>
86+
<artifactId>commons-lang3</artifactId>
87+
<scope>test</scope>
88+
</dependency>
8489
</dependencies>
8590
</project>

services/s3/src/it/java/software/amazon/awssdk/services/s3/UploadMultiplePartIntegrationTest.java

Lines changed: 86 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,29 @@
1818
import static org.assertj.core.api.Assertions.assertThat;
1919
import static software.amazon.awssdk.testutils.service.S3BucketUtils.temporaryBucketName;
2020

21+
import java.util.ArrayList;
22+
import java.util.List;
23+
import org.apache.commons.lang3.RandomStringUtils;
2124
import org.junit.AfterClass;
2225
import org.junit.BeforeClass;
2326
import org.junit.Test;
27+
import software.amazon.awssdk.core.ResponseBytes;
2428
import software.amazon.awssdk.core.sync.RequestBody;
29+
import software.amazon.awssdk.core.sync.ResponseTransformer;
30+
import software.amazon.awssdk.services.s3.model.AbortMultipartUploadResponse;
2531
import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadResponse;
2632
import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload;
2733
import software.amazon.awssdk.services.s3.model.CompletedPart;
28-
import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
34+
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
35+
import software.amazon.awssdk.services.s3.model.ListMultipartUploadsResponse;
36+
import software.amazon.awssdk.services.s3.model.MultipartUpload;
37+
import software.amazon.awssdk.services.s3.model.UploadPartRequest;
2938
import software.amazon.awssdk.services.s3.model.UploadPartResponse;
3039

3140
public class UploadMultiplePartIntegrationTest extends S3IntegrationTestBase {
3241

3342
private static final String BUCKET = temporaryBucketName(UploadMultiplePartIntegrationTest.class);
34-
35-
private static final String KEY = "uploadpart";
43+
private static final String CONTENT = RandomStringUtils.randomAscii(1000);
3644

3745
@BeforeClass
3846
public static void setupFixture() {
@@ -45,26 +53,87 @@ public static void tearDownFixture() {
4553
}
4654

4755
@Test
48-
public void uploadMultiplePart() {
49-
CreateMultipartUploadResponse multipartUpload = s3.createMultipartUpload(b ->
50-
b.bucket(BUCKET).key(KEY));
51-
long length = "helloworld".getBytes().length;
52-
UploadPartResponse uploadPartResponse =
53-
s3.uploadPart(b -> b.bucket(BUCKET).key(KEY)
54-
.uploadId(multipartUpload.uploadId())
55-
.partNumber(1)
56-
.contentLength(length), RequestBody.fromString("helloworld"));
57-
58-
String etag = uploadPartResponse.eTag();
56+
public void uploadMultiplePart_complete() throws Exception {
57+
String key = "uploadMultiplePart_complete";
58+
59+
// 1. Initiate multipartUpload request
60+
String uploadId = initiateMultipartUpload(key);
61+
62+
int partCount = 1;
63+
List<String> contentsToUpload = new ArrayList<>();
64+
65+
// 2. Upload each part
66+
List<UploadPartResponse> uploadPartResponses = uploadParts(key, uploadId, partCount, contentsToUpload);
67+
68+
List<CompletedPart> completedParts = new ArrayList<>();
69+
70+
for (int i = 0; i < uploadPartResponses.size(); i++) {
71+
int partNumber = i + 1;
72+
UploadPartResponse response = uploadPartResponses.get(i);
73+
completedParts.add(CompletedPart.builder().eTag(response.eTag()).partNumber(partNumber).build());
74+
}
5975

76+
// 3. Complete multipart upload
6077
CompleteMultipartUploadResponse completeMultipartUploadResponse =
61-
s3.completeMultipartUpload(b -> b.bucket(BUCKET).key(KEY).uploadId(multipartUpload.uploadId())
78+
s3.completeMultipartUpload(b -> b.bucket(BUCKET)
79+
.key(key)
80+
.uploadId(uploadId)
6281
.multipartUpload(CompletedMultipartUpload.builder()
63-
.parts(CompletedPart.builder().
64-
eTag(etag).partNumber(1).build())
82+
.parts(completedParts)
6583
.build()).build());
6684

6785
assertThat(completeMultipartUploadResponse).isNotNull();
86+
verifyMultipartUploadResult(key, contentsToUpload);
87+
}
88+
89+
@Test
90+
public void uploadMultiplePart_abort() {
91+
String key = "uploadMultiplePart_abort";
92+
93+
// 1. Initiate multipartUpload request
94+
String uploadId = initiateMultipartUpload(key);
95+
int partCount = 3;
96+
97+
// 2. Upload each part
98+
List<String> contentsToUpload = new ArrayList<>();
99+
List<UploadPartResponse> uploadPartResponses = uploadParts(key, uploadId, partCount, contentsToUpload);
100+
101+
// 3. abort the multipart upload
102+
AbortMultipartUploadResponse abortMultipartUploadResponse =
103+
s3.abortMultipartUpload(b -> b.bucket(BUCKET).key(key).uploadId(uploadId));
104+
105+
// Verify no in-progress multipart uploads
106+
ListMultipartUploadsResponse listMultipartUploadsResponse = s3.listMultipartUploads(b -> b.bucket(BUCKET));
107+
108+
List<MultipartUpload> uploads = listMultipartUploadsResponse.uploads();
109+
110+
assertThat(uploads).isEmpty();
111+
}
112+
113+
private void verifyMultipartUploadResult(String key, List<String> contentsToUpload) throws Exception {
114+
ResponseBytes<GetObjectResponse> objectAsBytes = s3.getObject(b -> b.bucket(BUCKET).key(key),
115+
ResponseTransformer.toBytes());
116+
String appendedString = String.join("", contentsToUpload);
117+
assertThat(objectAsBytes.asUtf8String()).isEqualTo(appendedString);
68118
}
69119

120+
private List<UploadPartResponse> uploadParts(String key, String uploadId, int partCount, List<String> contentsToUpload) {
121+
List<UploadPartResponse> uploadPartResponses = new ArrayList<>();
122+
123+
for (int i = 0; i < partCount; i++) {
124+
int partNumber = i + 1;
125+
contentsToUpload.add(CONTENT);
126+
UploadPartRequest uploadPartRequest = UploadPartRequest.builder().bucket(BUCKET).key(key)
127+
.uploadId(uploadId)
128+
.partNumber(partNumber)
129+
.build();
130+
131+
uploadPartResponses.add(s3.uploadPart(uploadPartRequest, RequestBody.fromString(CONTENT)));
132+
}
133+
return uploadPartResponses;
134+
}
135+
136+
private String initiateMultipartUpload(String key) {
137+
return s3.createMultipartUpload(b -> b.bucket(BUCKET).key(key)).uploadId();
138+
}
70139
}

0 commit comments

Comments
 (0)