Skip to content

Commit becc33f

Browse files
committed
Fix up testExecuteMultipartUpload
1 parent 231bb05 commit becc33f

File tree

1 file changed

+40
-33
lines changed

1 file changed

+40
-33
lines changed

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreContainerTests.java

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.ArrayList;
4444
import java.util.Arrays;
4545
import java.util.List;
46+
import java.util.Optional;
4647
import java.util.stream.Collectors;
4748
import java.util.stream.IntStream;
4849

@@ -207,16 +208,16 @@ public void testExecuteMultipartUpload() throws IOException {
207208

208209
final S3Client client = configureMockClient(blobStore);
209210

210-
final ArgumentCaptor<CreateMultipartUploadRequest> createMultipartUploadRequestArgCaptor = ArgumentCaptor.forClass(
211+
final var uploadId = randomIdentifier();
212+
final ArgumentCaptor<CreateMultipartUploadRequest> createMultipartUploadRequestCaptor = ArgumentCaptor.forClass(
211213
CreateMultipartUploadRequest.class
212214
);
213-
final CreateMultipartUploadResponse multipartUploadResponse = CreateMultipartUploadResponse.builder()
214-
.uploadId(randomAlphaOfLength(10))
215-
.build();
216-
when(client.createMultipartUpload(createMultipartUploadRequestArgCaptor.capture())).thenReturn(multipartUploadResponse);
215+
when(client.createMultipartUpload(createMultipartUploadRequestCaptor.capture())).thenReturn(
216+
CreateMultipartUploadResponse.builder().uploadId(uploadId).build()
217+
);
217218

218-
final ArgumentCaptor<UploadPartRequest> uploadArgCaptor = ArgumentCaptor.forClass(UploadPartRequest.class);
219-
final ArgumentCaptor<RequestBody> argumentCaptorBody = ArgumentCaptor.forClass(RequestBody.class); // TODO NOMERGE: test anything?
219+
final ArgumentCaptor<UploadPartRequest> uploadPartRequestCaptor = ArgumentCaptor.forClass(UploadPartRequest.class);
220+
final ArgumentCaptor<RequestBody> uploadPartBodyCaptor = ArgumentCaptor.forClass(RequestBody.class);
220221

221222
final List<String> expectedEtags = new ArrayList<>();
222223
final long partSize = Math.min(bufferSize, blobSize);
@@ -226,21 +227,25 @@ public void testExecuteMultipartUpload() throws IOException {
226227
totalBytes += partSize;
227228
} while (totalBytes < blobSize);
228229

229-
when(client.uploadPart(uploadArgCaptor.capture(), argumentCaptorBody.capture())).thenAnswer(invocationOnMock -> {
230+
when(client.uploadPart(uploadPartRequestCaptor.capture(), uploadPartBodyCaptor.capture())).thenAnswer(invocationOnMock -> {
230231
final UploadPartRequest request = (UploadPartRequest) invocationOnMock.getArguments()[0];
231-
final UploadPartResponse.Builder response = UploadPartResponse.builder();
232-
response.eTag(expectedEtags.get(request.partNumber() - 1));
233-
return response;
232+
final UploadPartResponse.Builder responseBuilder = UploadPartResponse.builder();
233+
responseBuilder.eTag(expectedEtags.get(request.partNumber() - 1));
234+
return responseBuilder.build();
234235
});
235236

236-
final ArgumentCaptor<CompleteMultipartUploadRequest> compArgCaptor = ArgumentCaptor.forClass(CompleteMultipartUploadRequest.class);
237-
when(client.completeMultipartUpload(compArgCaptor.capture())).thenReturn(CompleteMultipartUploadResponse.builder().build());
237+
final ArgumentCaptor<CompleteMultipartUploadRequest> completeMultipartUploadRequestCaptor = ArgumentCaptor.forClass(
238+
CompleteMultipartUploadRequest.class
239+
);
240+
when(client.completeMultipartUpload(completeMultipartUploadRequestCaptor.capture())).thenReturn(
241+
CompleteMultipartUploadResponse.builder().build()
242+
);
238243

239244
final ByteArrayInputStream inputStream = new ByteArrayInputStream(new byte[0]);
240245
final S3BlobContainer blobContainer = new S3BlobContainer(blobPath, blobStore);
241246
blobContainer.executeMultipartUpload(randomPurpose(), blobStore, blobName, inputStream, blobSize);
242247

243-
final CreateMultipartUploadRequest initRequest = createMultipartUploadRequestArgCaptor.getValue();
248+
final CreateMultipartUploadRequest initRequest = createMultipartUploadRequestCaptor.getValue();
244249
assertEquals(bucketName, initRequest.bucket());
245250
assertEquals(blobPath.buildAsString() + blobName, initRequest.key());
246251
assertEquals(storageClass, initRequest.storageClass());
@@ -254,35 +259,37 @@ public void testExecuteMultipartUpload() throws IOException {
254259

255260
final Tuple<Long, Long> numberOfParts = S3BlobContainer.numberOfMultiparts(blobSize, bufferSize);
256261

257-
final List<UploadPartRequest> uploadRequests = uploadArgCaptor.getAllValues();
258-
assertEquals(numberOfParts.v1().intValue(), uploadRequests.size());
262+
final List<UploadPartRequest> uploadPartRequests = uploadPartRequestCaptor.getAllValues();
263+
assertEquals(numberOfParts.v1().intValue(), uploadPartRequests.size());
259264

260-
for (int i = 0; i < uploadRequests.size(); i++) {
261-
final UploadPartRequest uploadRequest = uploadRequests.get(i);
265+
final List<RequestBody> uploadPartBodies = uploadPartBodyCaptor.getAllValues();
266+
assertEquals(numberOfParts.v1().intValue(), uploadPartBodies.size());
267+
268+
for (int i = 0; i < uploadPartRequests.size(); i++) {
269+
final UploadPartRequest uploadRequest = uploadPartRequests.get(i);
262270

263271
assertEquals(bucketName, uploadRequest.bucket());
264272
assertEquals(blobPath.buildAsString() + blobName, uploadRequest.key());
265-
// TODO NOMERGE: revisit, did I do this right? Not obvious uploadRequest's ID should be multipartUploadResponse's, revisit.
266-
assertEquals(multipartUploadResponse.uploadId(), uploadRequest.uploadId());
273+
assertEquals(uploadId, uploadRequest.uploadId());
267274
assertEquals(i + 1, uploadRequest.partNumber().intValue());
268-
// TODO NOMERGE: no more input stream access in the request object -- understand test and verify this is OK
269-
// assertEquals(inputStream, uploadRequest.getInputStream());
270275

271-
if (i == (uploadRequests.size() - 1)) {
272-
assertTrue(uploadRequest.sdkPartType() == SdkPartType.LAST);
273-
// TODO NOMERGE: investigate numberOfMultiparts and what the values represent, to find an equivalent
274-
// assertEquals(numberOfParts.v2().longValue(), uploadRequest.getPartSize());
275-
} else {
276-
assertFalse(uploadRequest.sdkPartType() == SdkPartType.LAST);
277-
// TODO NOMERGE: investigate numberOfMultiparts and what the values represent, to find an equivalent
278-
// assertEquals(bufferSize, uploadRequest.getPartSize());
279-
}
276+
assertEquals(
277+
uploadRequest.sdkPartType() + " at " + i + " of " + uploadPartRequests.size(),
278+
uploadRequest.sdkPartType() == SdkPartType.LAST,
279+
i == uploadPartRequests.size() - 1
280+
);
281+
282+
assertEquals(
283+
"part " + i,
284+
uploadRequest.sdkPartType() == SdkPartType.LAST ? Optional.of(numberOfParts.v2()) : Optional.of(bufferSize),
285+
uploadPartBodies.get(i).optionalContentLength()
286+
);
280287
}
281288

282-
final CompleteMultipartUploadRequest compRequest = compArgCaptor.getValue();
289+
final CompleteMultipartUploadRequest compRequest = completeMultipartUploadRequestCaptor.getValue();
283290
assertEquals(bucketName, compRequest.bucket());
284291
assertEquals(blobPath.buildAsString() + blobName, compRequest.key());
285-
assertEquals(multipartUploadResponse.uploadId(), compRequest.uploadId());
292+
assertEquals(uploadId, compRequest.uploadId());
286293

287294
final List<String> actualETags = compRequest.multipartUpload()
288295
.parts()

0 commit comments

Comments
 (0)