Skip to content

Commit 0b6f424

Browse files
committed
Add more tests
1 parent 942a04c commit 0b6f424

File tree

3 files changed

+110
-1
lines changed

3 files changed

+110
-1
lines changed

core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/AwsExecutionContextBuilderTest.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,17 @@
2222
import static org.mockito.Mockito.verify;
2323
import static org.mockito.Mockito.when;
2424

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;
2530
import java.util.Arrays;
2631
import java.util.Collections;
2732
import java.util.List;
2833
import java.util.Map;
2934
import java.util.Optional;
35+
import java.util.UUID;
3036
import java.util.concurrent.CompletableFuture;
3137
import java.util.function.Supplier;
3238
import org.junit.Before;
@@ -44,6 +50,8 @@
4450
import software.amazon.awssdk.core.SdkRequest;
4551
import software.amazon.awssdk.core.SdkResponse;
4652
import software.amazon.awssdk.core.SelectedAuthScheme;
53+
import software.amazon.awssdk.core.async.AsyncRequestBody;
54+
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
4755
import software.amazon.awssdk.core.checksums.ChecksumSpecs;
4856
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
4957
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
@@ -59,6 +67,9 @@
5967
import software.amazon.awssdk.core.internal.util.HttpChecksumUtils;
6068
import software.amazon.awssdk.core.signer.NoOpSigner;
6169
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;
6273
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4AuthScheme;
6374
import software.amazon.awssdk.http.auth.scheme.NoAuthAuthScheme;
6475
import software.amazon.awssdk.http.auth.spi.scheme.AuthScheme;
@@ -71,6 +82,7 @@
7182
import software.amazon.awssdk.identity.spi.TokenIdentity;
7283
import software.amazon.awssdk.profiles.ProfileFile;
7384
import software.amazon.awssdk.regions.RegionScope;
85+
import software.amazon.awssdk.utils.CollectionUtils;
7486

7587
@RunWith(MockitoJUnitRunner.class)
7688
public class AwsExecutionContextBuilderTest {
@@ -437,6 +449,74 @@ public void invokeInterceptorsAndCreateExecutionContext_requestOverrideForIdenti
437449
assertThat(actualTokenProvider).isSameAs(requestTokenProvider);
438450
}
439451

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+
440520
private ClientExecutionParams<SdkRequest, SdkResponse> clientExecutionParams() {
441521
return clientExecutionParams(sdkRequest);
442522
}

core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/http/pipeline/stages/ApplyUserAgentStageTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static software.amazon.awssdk.core.internal.useragent.UserAgentConstant.RETRY_MODE;
2525
import static software.amazon.awssdk.core.internal.useragent.UserAgentConstant.SPACE;
2626

27+
import java.util.Arrays;
2728
import java.util.List;
2829
import java.util.concurrent.CompletableFuture;
2930
import org.junit.Test;
@@ -43,6 +44,7 @@
4344
import software.amazon.awssdk.core.internal.http.RequestExecutionContext;
4445
import software.amazon.awssdk.core.internal.useragent.SdkClientUserAgentProperties;
4546
import software.amazon.awssdk.core.internal.useragent.SdkUserAgentBuilder;
47+
import software.amazon.awssdk.core.useragent.AdditionalMetadata;
4648
import software.amazon.awssdk.core.util.SystemUserAgent;
4749
import software.amazon.awssdk.http.SdkHttpFullRequest;
4850
import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption;
@@ -120,6 +122,24 @@ public void when_requestContainsApiName_apiNamesArePresent() throws Exception {
120122
assertThat(userAgentHeaders.get(0)).contains("myLib/1.0");
121123
}
122124

125+
@Test
126+
public void when_requestContainsMetadata_metadataIsPresent() throws Exception {
127+
ApplyUserAgentStage stage = new ApplyUserAgentStage(dependencies(clientUserAgent()));
128+
129+
RequestExecutionContext ctx = requestExecutionContext(
130+
executionAttributes(Arrays.asList(
131+
AdditionalMetadata.builder().name("name1").value("value1").build(),
132+
AdditionalMetadata.builder().name("name2").value("value2").build()
133+
)),
134+
noOpRequest());
135+
SdkHttpFullRequest.Builder request = stage.execute(SdkHttpFullRequest.builder(), ctx);
136+
137+
List<String> userAgentHeaders = request.headers().get(HEADER_USER_AGENT);
138+
assertThat(userAgentHeaders).isNotNull().hasSize(1);
139+
assertThat(userAgentHeaders.get(0)).contains("md/name1#value1");
140+
assertThat(userAgentHeaders.get(0)).contains("md/name2#value2");
141+
}
142+
123143
@Test
124144
public void when_identityContainsProvider_authSourceIsPresent() throws Exception {
125145
ApplyUserAgentStage stage = new ApplyUserAgentStage(dependencies(clientUserAgent()));
@@ -185,6 +205,12 @@ private static ExecutionAttributes executionAttributes(AwsCredentialsIdentity id
185205
return executionAttributes;
186206
}
187207

208+
private static ExecutionAttributes executionAttributes(List<AdditionalMetadata> metadata) {
209+
ExecutionAttributes executionAttributes = new ExecutionAttributes();
210+
executionAttributes.putAttribute(SdkInternalExecutionAttribute.USER_AGENT_METADATA, metadata);
211+
return executionAttributes;
212+
}
213+
188214
private RequestExecutionContext requestExecutionContext(ExecutionAttributes executionAttributes,
189215
SdkRequest request) {
190216
ExecutionContext executionContext = ExecutionContext.builder()

test/architecture-tests/src/test/java/software/amazon/awssdk/archtests/CodingConventionWithSuppressionTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.regex.Pattern;
3434
import org.junit.jupiter.api.Test;
3535
import software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage;
36+
import software.amazon.awssdk.core.sync.ResponseTransformer;
3637
import software.amazon.awssdk.metrics.publishers.emf.EmfMetricLoggingPublisher;
3738
import software.amazon.awssdk.metrics.publishers.emf.internal.MetricEmfConverter;
3839
import software.amazon.awssdk.utils.Logger;
@@ -52,7 +53,9 @@ public class CodingConventionWithSuppressionTest {
5253
ArchUtils.classNameToPattern("software.amazon.awssdk.services.s3.internal.crt.S3CrtResponseHandlerAdapter")));
5354

5455
private static final Set<Pattern> ALLOWED_ERROR_LOG_SUPPRESSION = new HashSet<>(
55-
Arrays.asList(ArchUtils.classNameToPattern(EmfMetricLoggingPublisher.class)));
56+
Arrays.asList(
57+
ArchUtils.classNameToPattern(EmfMetricLoggingPublisher.class),
58+
ArchUtils.classNameToPattern(ResponseTransformer.class)));
5659

5760
@Test
5861
void shouldNotAbuseWarnLog() {

0 commit comments

Comments
 (0)