|
22 | 22 | import static org.mockito.Mockito.verify; |
23 | 23 | import static org.mockito.Mockito.when; |
24 | 24 |
|
| 25 | +import java.io.File; |
| 26 | +import java.io.IOException; |
| 27 | +import java.nio.charset.StandardCharsets; |
| 28 | +import java.nio.file.Files; |
| 29 | +import java.nio.file.Paths; |
25 | 30 | import java.util.Arrays; |
26 | 31 | import java.util.Collections; |
27 | 32 | import java.util.List; |
28 | 33 | import java.util.Map; |
29 | 34 | import java.util.Optional; |
| 35 | +import java.util.UUID; |
30 | 36 | import java.util.concurrent.CompletableFuture; |
31 | 37 | import java.util.function.Supplier; |
32 | 38 | import org.junit.Before; |
|
44 | 50 | import software.amazon.awssdk.core.SdkRequest; |
45 | 51 | import software.amazon.awssdk.core.SdkResponse; |
46 | 52 | import software.amazon.awssdk.core.SelectedAuthScheme; |
| 53 | +import software.amazon.awssdk.core.async.AsyncRequestBody; |
| 54 | +import software.amazon.awssdk.core.async.AsyncResponseTransformer; |
47 | 55 | import software.amazon.awssdk.core.checksums.ChecksumSpecs; |
48 | 56 | import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; |
49 | 57 | import software.amazon.awssdk.core.client.config.SdkClientConfiguration; |
|
59 | 67 | import software.amazon.awssdk.core.internal.util.HttpChecksumUtils; |
60 | 68 | import software.amazon.awssdk.core.signer.NoOpSigner; |
61 | 69 | import software.amazon.awssdk.core.signer.Signer; |
| 70 | +import software.amazon.awssdk.core.sync.RequestBody; |
| 71 | +import software.amazon.awssdk.core.sync.ResponseTransformer; |
| 72 | +import software.amazon.awssdk.core.useragent.AdditionalMetadata; |
62 | 73 | import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme; |
63 | 74 | import software.amazon.awssdk.http.auth.scheme.NoAuthAuthScheme; |
64 | 75 | import software.amazon.awssdk.http.auth.spi.scheme.AuthScheme; |
|
71 | 82 | import software.amazon.awssdk.identity.spi.TokenIdentity; |
72 | 83 | import software.amazon.awssdk.profiles.ProfileFile; |
73 | 84 | import software.amazon.awssdk.regions.RegionScope; |
| 85 | +import software.amazon.awssdk.utils.CollectionUtils; |
74 | 86 |
|
75 | 87 | @RunWith(MockitoJUnitRunner.class) |
76 | 88 | public class AwsExecutionContextBuilderTest { |
@@ -437,6 +449,74 @@ public void invokeInterceptorsAndCreateExecutionContext_requestOverrideForIdenti |
437 | 449 | assertThat(actualTokenProvider).isSameAs(requestTokenProvider); |
438 | 450 | } |
439 | 451 |
|
| 452 | + @Test |
| 453 | + public void invokeInterceptorsAndCreateExecutionContext_withRequestBody_addsUserAgentMetadata() throws IOException { |
| 454 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams(); |
| 455 | + File testFile = File.createTempFile("testFile", UUID.randomUUID().toString()); |
| 456 | + testFile.deleteOnExit(); |
| 457 | + executionParams.withRequestBody(RequestBody.fromFile(testFile)); |
| 458 | + |
| 459 | + ExecutionContext executionContext = |
| 460 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 461 | + testClientConfiguration().build()); |
| 462 | + |
| 463 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 464 | + assertThat(executionAttributes.getAttribute(SdkInternalExecutionAttribute.USER_AGENT_METADATA)).isEqualTo( |
| 465 | + Collections.singletonList(AdditionalMetadata.builder().name("rb").value("f").build()) |
| 466 | + ); |
| 467 | + } |
| 468 | + |
| 469 | + @Test |
| 470 | + public void invokeInterceptorsAndCreateExecutionContext_withResponseTransformer_addsUserAgentMetadata() throws IOException { |
| 471 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams(); |
| 472 | + File testFile = File.createTempFile("testFile", UUID.randomUUID().toString()); |
| 473 | + testFile.deleteOnExit(); |
| 474 | + executionParams.withResponseTransformer(ResponseTransformer.toFile(testFile)); |
| 475 | + |
| 476 | + ExecutionContext executionContext = |
| 477 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 478 | + testClientConfiguration().build()); |
| 479 | + |
| 480 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 481 | + assertThat(executionAttributes.getAttribute(SdkInternalExecutionAttribute.USER_AGENT_METADATA)).isEqualTo( |
| 482 | + Collections.singletonList(AdditionalMetadata.builder().name("rt").value("f").build()) |
| 483 | + ); |
| 484 | + } |
| 485 | + |
| 486 | + @Test |
| 487 | + public void invokeInterceptorsAndCreateExecutionContext_withAsyncRequestBody_addsUserAgentMetadata() throws IOException { |
| 488 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams(); |
| 489 | + File testFile = File.createTempFile("testFile", UUID.randomUUID().toString()); |
| 490 | + testFile.deleteOnExit(); |
| 491 | + executionParams.withAsyncRequestBody(AsyncRequestBody.fromFile(testFile)); |
| 492 | + |
| 493 | + ExecutionContext executionContext = |
| 494 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 495 | + testClientConfiguration().build()); |
| 496 | + |
| 497 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 498 | + assertThat(executionAttributes.getAttribute(SdkInternalExecutionAttribute.USER_AGENT_METADATA)).isEqualTo( |
| 499 | + Collections.singletonList(AdditionalMetadata.builder().name("rb").value("f").build()) |
| 500 | + ); |
| 501 | + } |
| 502 | + |
| 503 | + @Test |
| 504 | + public void invokeInterceptorsAndCreateExecutionContext_withAsyncResponseTransformer_addsUserAgentMetadata() throws IOException { |
| 505 | + ClientExecutionParams<SdkRequest, SdkResponse> executionParams = clientExecutionParams(); |
| 506 | + File testFile = File.createTempFile("testFile", UUID.randomUUID().toString()); |
| 507 | + testFile.deleteOnExit(); |
| 508 | + executionParams.withAsyncResponseTransformer(AsyncResponseTransformer.toFile(testFile)); |
| 509 | + |
| 510 | + ExecutionContext executionContext = |
| 511 | + AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(executionParams, |
| 512 | + testClientConfiguration().build()); |
| 513 | + |
| 514 | + ExecutionAttributes executionAttributes = executionContext.executionAttributes(); |
| 515 | + assertThat(executionAttributes.getAttribute(SdkInternalExecutionAttribute.USER_AGENT_METADATA)).isEqualTo( |
| 516 | + Collections.singletonList(AdditionalMetadata.builder().name("rt").value("f").build()) |
| 517 | + ); |
| 518 | + } |
| 519 | + |
440 | 520 | private ClientExecutionParams<SdkRequest, SdkResponse> clientExecutionParams() { |
441 | 521 | return clientExecutionParams(sdkRequest); |
442 | 522 | } |
|
0 commit comments