|
15 | 15 |
|
16 | 16 | package software.amazon.awssdk.services.s3.internal.multipart;
|
17 | 17 |
|
| 18 | +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; |
18 | 19 | import static org.mockito.ArgumentMatchers.any;
|
19 | 20 | import static org.mockito.ArgumentMatchers.eq;
|
20 | 21 | import static org.mockito.Mockito.mock;
|
21 | 22 | import static org.mockito.Mockito.never;
|
22 | 23 | import static org.mockito.Mockito.times;
|
23 | 24 | import static org.mockito.Mockito.verify;
|
| 25 | +import static org.mockito.Mockito.when; |
24 | 26 |
|
| 27 | +import java.net.MalformedURLException; |
| 28 | +import java.net.URL; |
25 | 29 | import org.junit.jupiter.api.Test;
|
26 | 30 | import software.amazon.awssdk.core.ResponseBytes;
|
27 | 31 | import software.amazon.awssdk.core.SplittingTransformerConfiguration;
|
|
30 | 34 | import software.amazon.awssdk.services.s3.model.GetObjectRequest;
|
31 | 35 | import software.amazon.awssdk.services.s3.model.GetObjectResponse;
|
32 | 36 | import software.amazon.awssdk.services.s3.multipart.MultipartConfiguration;
|
| 37 | +import software.amazon.awssdk.services.s3.presignedurl.AsyncPresignedUrlExtension; |
| 38 | +import software.amazon.awssdk.services.s3.presignedurl.model.PresignedUrlDownloadRequest; |
33 | 39 |
|
34 | 40 | class MultipartS3AsyncClientTest {
|
35 | 41 |
|
@@ -64,4 +70,52 @@ void partManuallySpecified_shouldBypassMultipart() {
|
64 | 70 | verify(mockTransformer, never()).split(any(SplittingTransformerConfiguration.class));
|
65 | 71 | verify(mockDelegate, times(1)).getObject(any(GetObjectRequest.class), eq(mockTransformer));
|
66 | 72 | }
|
| 73 | + |
| 74 | + @Test |
| 75 | + void presignedUrlExtension_rangeSpecified_shouldBypassMultipart() throws MalformedURLException { |
| 76 | + S3AsyncClient mockDelegate = mock(S3AsyncClient.class); |
| 77 | + AsyncPresignedUrlExtension mockDelegateExtension = mock(AsyncPresignedUrlExtension.class); |
| 78 | + AsyncResponseTransformer<GetObjectResponse, String> mockTransformer = mock(AsyncResponseTransformer.class); |
| 79 | + PresignedUrlDownloadRequest req = PresignedUrlDownloadRequest.builder() |
| 80 | + .presignedUrl(new URL("https://s3.amazonaws.com/bucket/key?signature=abc")) |
| 81 | + .range("bytes=0-1023") |
| 82 | + .build(); |
| 83 | + when(mockDelegate.presignedUrlExtension()).thenReturn(mockDelegateExtension); |
| 84 | + S3AsyncClient s3AsyncClient = MultipartS3AsyncClient.create(mockDelegate, MultipartConfiguration.builder().build(), true); |
| 85 | + s3AsyncClient.presignedUrlExtension().getObject(req, mockTransformer); |
| 86 | + verify(mockTransformer, never()).split(any(SplittingTransformerConfiguration.class)); |
| 87 | + verify(mockDelegateExtension, times(1)).getObject(eq(req), eq(mockTransformer)); |
| 88 | + } |
| 89 | + |
| 90 | + // TODO: Enable this test once PresignedUrlMultipartDownloaderSubscriber is implemented |
| 91 | + // // Currently fails because multipart presigned URL download throws UnsupportedOperationException |
| 92 | + // @Test |
| 93 | + // void presignedUrlExtension_noRange_shouldUseMultipart() throws MalformedURLException { |
| 94 | + // S3AsyncClient mockDelegate = mock(S3AsyncClient.class); |
| 95 | + // AsyncPresignedUrlExtension mockDelegateExtension = mock(AsyncPresignedUrlExtension.class); |
| 96 | + // AsyncResponseTransformer<GetObjectResponse, String> mockTransformer = mock(AsyncResponseTransformer.class); |
| 97 | + // AsyncResponseTransformer.SplitResult<GetObjectResponse, String> mockSplitResult = mock(AsyncResponseTransformer.SplitResult.class); |
| 98 | + // PresignedUrlDownloadRequest req = PresignedUrlDownloadRequest.builder() |
| 99 | + // .presignedUrl(new URL("https://s3.amazonaws.com/bucket/key?signature=abc")) |
| 100 | + // .build(); |
| 101 | + // when(mockDelegate.presignedUrlExtension()).thenReturn(mockDelegateExtension); |
| 102 | + // when(mockTransformer.split(any(SplittingTransformerConfiguration.class))).thenReturn(mockSplitResult); |
| 103 | + // when(mockSplitResult.publisher()).thenReturn(mock(software.amazon.awssdk.core.async.SdkPublisher.class)); |
| 104 | + // S3AsyncClient s3AsyncClient = MultipartS3AsyncClient.create(mockDelegate, MultipartConfiguration.builder().build(), true); |
| 105 | + // s3AsyncClient.presignedUrlExtension().getObject(req, mockTransformer); |
| 106 | + // verify(mockTransformer, times(1)).split(any(SplittingTransformerConfiguration.class)); |
| 107 | + // verify(mockDelegateExtension, never()).getObject(any(PresignedUrlDownloadRequest.class), any(AsyncResponseTransformer.class)); |
| 108 | + // } |
| 109 | + |
| 110 | + @Test |
| 111 | + void presignedUrlExtension_shouldReturnMultipartExtension() { |
| 112 | + S3AsyncClient mockDelegate = mock(S3AsyncClient.class); |
| 113 | + AsyncPresignedUrlExtension mockDelegateExtension = mock(AsyncPresignedUrlExtension.class); |
| 114 | + when(mockDelegate.presignedUrlExtension()).thenReturn(mockDelegateExtension); |
| 115 | + |
| 116 | + S3AsyncClient s3AsyncClient = MultipartS3AsyncClient.create(mockDelegate, MultipartConfiguration.builder().build(), true); |
| 117 | + AsyncPresignedUrlExtension extension = s3AsyncClient.presignedUrlExtension(); |
| 118 | + |
| 119 | + assertThat(extension).isInstanceOf(MultipartAsyncPresignedUrlExtension.class); |
| 120 | + } |
67 | 121 | }
|
0 commit comments