|
31 | 31 | import org.mockito.Mock;
|
32 | 32 | import org.mockito.junit.MockitoJUnitRunner;
|
33 | 33 | import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
34 |
| -import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute; |
35 | 34 | import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
|
36 | 35 | import software.amazon.awssdk.awscore.client.config.AwsClientOption;
|
37 |
| -import software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder; |
38 | 36 | import software.amazon.awssdk.core.SdkRequest;
|
39 | 37 | import software.amazon.awssdk.core.SdkResponse;
|
| 38 | +import software.amazon.awssdk.core.checksums.ChecksumSpecs; |
40 | 39 | import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
|
41 | 40 | import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
|
42 | 41 | import software.amazon.awssdk.core.client.config.SdkClientOption;
|
43 | 42 | import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
|
44 | 43 | import software.amazon.awssdk.core.http.ExecutionContext;
|
45 |
| -import software.amazon.awssdk.core.interceptor.ExecutionAttribute; |
46 | 44 | import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
|
47 | 45 | import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
|
48 | 46 | import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
|
| 47 | +import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute; |
| 48 | +import software.amazon.awssdk.core.interceptor.trait.HttpChecksum; |
| 49 | +import software.amazon.awssdk.core.internal.util.HttpChecksumUtils; |
49 | 50 | import software.amazon.awssdk.core.signer.Signer;
|
50 | 51 |
|
51 | 52 | @RunWith(MockitoJUnitRunner.class)
|
@@ -120,6 +121,63 @@ public void signing_ifClientOverride_assignClientOverrideSigner() {
|
120 | 121 |
|
121 | 122 | assertThat(executionContext.signer()).isEqualTo(clientOverrideSigner);
|
122 | 123 | }
|
| 124 | + |
| 125 | + @Test |
| 126 | + public void invokeInterceptorsAndCreateExecutionContext_noHttpChecksumTrait_resolvesChecksumSpecs() { |
| 127 | + ExecutionContext executionContext = |
| 128 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(clientExecutionParams(), |
| 129 | + testClientConfiguration().build()); |
| 130 | + |
| 131 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 132 | + Optional<ChecksumSpecs> checksumSpecs1 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes); |
| 133 | + Optional<ChecksumSpecs> checksumSpecs2 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes); |
| 134 | + |
| 135 | + assertThat(checksumSpecs1).isNotPresent(); |
| 136 | + assertThat(checksumSpecs2).isNotPresent(); |
| 137 | + assertThat(checksumSpecs1).isSameAs(checksumSpecs2); |
| 138 | + } |
| 139 | + |
| 140 | + @Test |
| 141 | + public void invokeInterceptorsAndCreateExecutionContext_singleExecutionContext_resolvesChecksumSpecsOnce() { |
| 142 | + HttpChecksum httpCrc32Checksum = |
| 143 | + HttpChecksum.builder().requestAlgorithm("crc32").isRequestStreaming(true).build(); |
| 144 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams() |
| 145 | + .putExecutionAttribute(SdkInternalExecutionAttribute.HTTP_CHECKSUM, httpCrc32Checksum); |
| 146 | + |
| 147 | + ExecutionContext executionContext = |
| 148 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 149 | + testClientConfiguration().build()); |
| 150 | + |
| 151 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 152 | + ChecksumSpecs checksumSpecs1 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes).get(); |
| 153 | + ChecksumSpecs checksumSpecs2 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes).get(); |
| 154 | + |
| 155 | + assertThat(checksumSpecs1).isSameAs(checksumSpecs2); |
| 156 | + } |
| 157 | + |
| 158 | + @Test |
| 159 | + public void invokeInterceptorsAndCreateExecutionContext_multipleExecutionContexts_resolvesChecksumSpecsOncePerContext() { |
| 160 | + HttpChecksum httpCrc32Checksum = HttpChecksum.builder().requestAlgorithm("crc32").isRequestStreaming(true).build(); |
| 161 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams() |
| 162 | + .putExecutionAttribute(SdkInternalExecutionAttribute.HTTP_CHECKSUM, httpCrc32Checksum); |
| 163 | + SdkClientConfiguration clientConfig = testClientConfiguration().build(); |
| 164 | + |
| 165 | + ExecutionContext executionContext1 = |
| 166 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 167 | + clientConfig); |
| 168 | + ExecutionAttributes executionAttributes1 = executionContext1.executionAttributes(); |
| 169 | + ChecksumSpecs checksumSpecs1 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes1).get(); |
| 170 | + |
| 171 | + ExecutionContext executionContext2 = |
| 172 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 173 | + clientConfig); |
| 174 | + ExecutionAttributes executionAttributes2 = executionContext2.executionAttributes(); |
| 175 | + ChecksumSpecs checksumSpecs2 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes2).get(); |
| 176 | + ChecksumSpecs checksumSpecs3 = HttpChecksumUtils.checksumSpecWithRequestAlgorithm(executionAttributes2).get(); |
| 177 | + |
| 178 | + assertThat(checksumSpecs1).isNotSameAs(checksumSpecs2); |
| 179 | + assertThat(checksumSpecs2).isSameAs(checksumSpecs3); |
| 180 | + } |
123 | 181 |
|
124 | 182 | private ClientExecutionParams<SdkRequest, SdkResponse> clientExecutionParams() {
|
125 | 183 | return new ClientExecutionParams<SdkRequest, SdkResponse>()
|
|
0 commit comments