2929import software .amazon .awssdk .services .s3 .model .SdkPartType ;
3030import software .amazon .awssdk .services .s3 .model .StorageClass ;
3131import software .amazon .awssdk .services .s3 .model .UploadPartCopyRequest ;
32+ import software .amazon .awssdk .services .s3 .model .UploadPartCopyResponse ;
3233import software .amazon .awssdk .services .s3 .model .UploadPartRequest ;
3334import software .amazon .awssdk .services .s3 .model .UploadPartResponse ;
3435
@@ -233,7 +234,7 @@ void testExecuteMultipart(boolean doCopy) throws IOException {
233234 );
234235
235236 final ArgumentCaptor <UploadPartRequest > uploadPartRequestCaptor = ArgumentCaptor .forClass (UploadPartRequest .class );
236- final ArgumentCaptor <UploadPartCopyRequest > copyPartRequestCaptor = ArgumentCaptor .forClass (UploadPartCopyRequest .class );
237+ final ArgumentCaptor <UploadPartCopyRequest > uploadPartCopyRequestCaptor = ArgumentCaptor .forClass (UploadPartCopyRequest .class );
237238 final ArgumentCaptor <RequestBody > uploadPartBodyCaptor = ArgumentCaptor .forClass (RequestBody .class );
238239
239240 final List <String > expectedEtags = new ArrayList <>();
@@ -245,18 +246,14 @@ void testExecuteMultipart(boolean doCopy) throws IOException {
245246 } while (totalBytes < blobSize );
246247
247248 if (doCopy ) {
248- when (client .uploadPartCopy (copyPartRequestCaptor .capture (), uploadPartBodyCaptor .capture ())).thenAnswer (invocationOnMock -> {
249- final UploadPartRequest request = (UploadPartRequest ) invocationOnMock .getArguments ()[0 ];
250- final UploadPartResponse .Builder responseBuilder = UploadPartResponse .builder ();
251- responseBuilder .eTag (expectedEtags .get (request .partNumber () - 1 ));
252- return responseBuilder .build ();
249+ when (client .uploadPartCopy (uploadPartCopyRequestCaptor .capture ())).thenAnswer (invocationOnMock -> {
250+ final UploadPartCopyRequest request = invocationOnMock .getArgument (0 );
251+ return UploadPartCopyResponse .builder ().copyPartResult (b -> b .eTag (expectedEtags .get (request .partNumber ()))).build ();
253252 });
254253 } else {
255254 when (client .uploadPart (uploadPartRequestCaptor .capture (), uploadPartBodyCaptor .capture ())).thenAnswer (invocationOnMock -> {
256- final UploadPartRequest request = (UploadPartRequest ) invocationOnMock .getArguments ()[0 ];
257- final UploadPartResponse .Builder responseBuilder = UploadPartResponse .builder ();
258- responseBuilder .eTag (expectedEtags .get (request .partNumber () - 1 ));
259- return responseBuilder .build ();
255+ final UploadPartRequest request = invocationOnMock .getArgument (0 );
256+ return UploadPartResponse .builder ().eTag (expectedEtags .get (request .partNumber () - 1 )).build ();
260257 });
261258 }
262259
@@ -292,42 +289,47 @@ void testExecuteMultipart(boolean doCopy) throws IOException {
292289 final Tuple <Long , Long > numberOfParts = S3BlobContainer .numberOfMultiparts (blobSize , partSize );
293290
294291 if (doCopy ) {
295- final var copyRequests = copyArgCaptor .getAllValues ();
292+ final var copyRequests = uploadPartCopyRequestCaptor .getAllValues ();
296293 assertEquals (numberOfParts .v1 ().intValue (), copyRequests .size ());
297294 for (int i = 0 ; i < copyRequests .size (); i ++) {
298- final var request = copyRequests .get (i );
295+ final var uploadPartCopyRequest = copyRequests .get (i );
299296 final long startOffset = i * partSize ;
300297 final long endOffset = Math .min (startOffset + partSize - 1 , blobSize - 1 );
301298
302- assertEquals (sourceBucketName , request .getSourceBucketName ());
303- assertEquals (sourceBlobPath .buildAsString () + sourceBlobName , request .getSourceKey ());
304- assertEquals (bucketName , request .getDestinationBucketName ());
305- assertEquals (blobPath .buildAsString () + blobName , request .getDestinationKey ());
306- assertEquals (initResult .getUploadId (), request .getUploadId ());
307- assertEquals (i + 1 , request .getPartNumber ());
308- assertEquals (Long .valueOf (startOffset ), request .getFirstByte ());
309- assertEquals (Long .valueOf (endOffset ), request .getLastByte ());
299+ assertEquals (sourceBucketName , uploadPartCopyRequest .sourceBucket ());
300+ assertEquals (sourceBlobPath .buildAsString () + sourceBlobName , uploadPartCopyRequest .sourceKey ());
301+ assertEquals (bucketName , uploadPartCopyRequest .destinationBucket ());
302+ assertEquals (blobPath .buildAsString () + blobName , uploadPartCopyRequest .destinationKey ());
303+ assertEquals (uploadId , uploadPartCopyRequest .uploadId ());
304+ assertEquals (Integer .valueOf (i + 1 ), uploadPartCopyRequest .partNumber ());
305+ assertEquals ("bytes=" + startOffset + "-" + endOffset , uploadPartCopyRequest .copySourceRange ());
310306 }
311307 } else {
312- final List <UploadPartRequest > uploadRequests = uploadArgCaptor .getAllValues ();
313- assertEquals (numberOfParts .v1 ().intValue (), uploadRequests .size ());
314-
315- for (int i = 0 ; i < uploadRequests .size (); i ++) {
316- final UploadPartRequest uploadRequest = uploadRequests .get (i );
317-
318- assertEquals (bucketName , uploadRequest .getBucketName ());
319- assertEquals (blobPath .buildAsString () + blobName , uploadRequest .getKey ());
320- assertEquals (initResult .getUploadId (), uploadRequest .getUploadId ());
321- assertEquals (i + 1 , uploadRequest .getPartNumber ());
322- assertEquals (inputStream , uploadRequest .getInputStream ());
323-
324- if (i == (uploadRequests .size () - 1 )) {
325- assertTrue (uploadRequest .isLastPart ());
326- assertEquals (numberOfParts .v2 ().longValue (), uploadRequest .getPartSize ());
327- } else {
328- assertFalse (uploadRequest .isLastPart ());
329- assertEquals (bufferSize , uploadRequest .getPartSize ());
330- }
308+ final List <UploadPartRequest > uploadPartRequests = uploadPartRequestCaptor .getAllValues ();
309+ assertEquals (numberOfParts .v1 ().intValue (), uploadPartRequests .size ());
310+
311+ final List <RequestBody > uploadPartBodies = uploadPartBodyCaptor .getAllValues ();
312+ assertEquals (numberOfParts .v1 ().intValue (), uploadPartBodies .size ());
313+
314+ for (int i = 0 ; i < uploadPartRequests .size (); i ++) {
315+ final UploadPartRequest uploadRequest = uploadPartRequests .get (i );
316+
317+ assertEquals (bucketName , uploadRequest .bucket ());
318+ assertEquals (blobPath .buildAsString () + blobName , uploadRequest .key ());
319+ assertEquals (uploadId , uploadRequest .uploadId ());
320+ assertEquals (i + 1 , uploadRequest .partNumber ().intValue ());
321+
322+ assertEquals (
323+ uploadRequest .sdkPartType () + " at " + i + " of " + uploadPartRequests .size (),
324+ uploadRequest .sdkPartType () == SdkPartType .LAST ,
325+ i == uploadPartRequests .size () - 1
326+ );
327+
328+ assertEquals (
329+ "part " + i ,
330+ uploadRequest .sdkPartType () == SdkPartType .LAST ? Optional .of (numberOfParts .v2 ()) : Optional .of (bufferSize ),
331+ uploadPartBodies .get (i ).optionalContentLength ()
332+ );
331333 }
332334 }
333335
0 commit comments