Skip to content

Commit 6000d9f

Browse files
committed
Add tests
1 parent 305ba3a commit 6000d9f

File tree

1 file changed

+70
-3
lines changed

1 file changed

+70
-3
lines changed

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-async-client-class.java

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,39 @@
66
import java.util.List;
77
import java.util.Optional;
88
import java.util.concurrent.CompletableFuture;
9+
import java.util.concurrent.CompletionException;
910
import java.util.function.Consumer;
1011
import java.util.function.Function;
1112
import org.slf4j.Logger;
1213
import org.slf4j.LoggerFactory;
1314
import software.amazon.awssdk.annotations.Generated;
1415
import software.amazon.awssdk.annotations.SdkInternalApi;
16+
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
1517
import software.amazon.awssdk.awscore.client.handler.AwsAsyncClientHandler;
18+
import software.amazon.awssdk.awscore.endpoints.AwsEndpointAttribute;
19+
import software.amazon.awssdk.awscore.endpoints.authscheme.EndpointAuthScheme;
1620
import software.amazon.awssdk.awscore.exception.AwsServiceException;
1721
import software.amazon.awssdk.awscore.internal.AwsProtocolMetadata;
1822
import software.amazon.awssdk.awscore.internal.AwsServiceProtocol;
23+
import software.amazon.awssdk.awscore.internal.endpoints.AwsEndpointProviderUtils;
1924
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
2025
import software.amazon.awssdk.core.RequestOverrideConfiguration;
2126
import software.amazon.awssdk.core.SdkPlugin;
2227
import software.amazon.awssdk.core.SdkRequest;
28+
import software.amazon.awssdk.core.SelectedAuthScheme;
2329
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
2430
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
2531
import software.amazon.awssdk.core.client.config.SdkClientOption;
2632
import software.amazon.awssdk.core.client.handler.AsyncClientHandler;
2733
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
34+
import software.amazon.awssdk.core.exception.SdkClientException;
2835
import software.amazon.awssdk.core.http.HttpResponseHandler;
36+
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
37+
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
2938
import software.amazon.awssdk.core.metrics.CoreMetric;
3039
import software.amazon.awssdk.core.retry.RetryMode;
40+
import software.amazon.awssdk.endpoints.Endpoint;
41+
import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption;
3142
import software.amazon.awssdk.metrics.MetricCollector;
3243
import software.amazon.awssdk.metrics.MetricPublisher;
3344
import software.amazon.awssdk.metrics.NoOpMetricCollector;
@@ -37,6 +48,11 @@
3748
import software.amazon.awssdk.protocols.json.BaseAwsJsonProtocolFactory;
3849
import software.amazon.awssdk.protocols.json.JsonOperationMetadata;
3950
import software.amazon.awssdk.retries.api.RetryStrategy;
51+
import software.amazon.awssdk.services.querytojsoncompatible.auth.scheme.QueryToJsonCompatibleAuthSchemeParams;
52+
import software.amazon.awssdk.services.querytojsoncompatible.auth.scheme.QueryToJsonCompatibleAuthSchemeProvider;
53+
import software.amazon.awssdk.services.querytojsoncompatible.endpoints.QueryToJsonCompatibleEndpointParams;
54+
import software.amazon.awssdk.services.querytojsoncompatible.endpoints.QueryToJsonCompatibleEndpointProvider;
55+
import software.amazon.awssdk.services.querytojsoncompatible.endpoints.internal.QueryToJsonCompatibleEndpointResolverUtils;
4056
import software.amazon.awssdk.services.querytojsoncompatible.internal.QueryToJsonCompatibleServiceClientConfigurationBuilder;
4157
import software.amazon.awssdk.services.querytojsoncompatible.internal.ServiceVersionInfo;
4258
import software.amazon.awssdk.services.querytojsoncompatible.model.APostOperationRequest;
@@ -46,6 +62,7 @@
4662
import software.amazon.awssdk.services.querytojsoncompatible.transform.APostOperationRequestMarshaller;
4763
import software.amazon.awssdk.utils.CompletableFutureUtils;
4864
import software.amazon.awssdk.utils.HostnameValidator;
65+
import software.amazon.awssdk.utils.Validate;
4966

5067
/**
5168
* Internal implementation of {@link QueryToJsonCompatibleAsyncClient}.
@@ -133,10 +150,16 @@ public CompletableFuture<APostOperationResponse> aPostOperation(APostOperationRe
133150

134151
CompletableFuture<APostOperationResponse> executeFuture = clientHandler
135152
.execute(new ClientExecutionParams<APostOperationRequest, APostOperationResponse>()
136-
.withOperationName("APostOperation").withProtocolMetadata(protocolMetadata)
153+
.withOperationName("APostOperation")
154+
.withProtocolMetadata(protocolMetadata)
137155
.withMarshaller(new APostOperationRequestMarshaller(protocolFactory))
138-
.withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler)
139-
.withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector)
156+
.withResponseHandler(responseHandler)
157+
.withErrorResponseHandler(errorResponseHandler)
158+
.withRequestConfiguration(clientConfiguration)
159+
.withMetricCollector(apiCallMetricCollector)
160+
.withAuthSchemeOptionsResolver(
161+
r -> resolveAuthSchemeOptions(r, "APostOperation", clientConfiguration))
162+
.withEndpointResolver((r, a) -> resolveEndpoint(r, a, "APostOperation"))
140163
.hostPrefixExpression(resolvedHostExpression).withInput(aPostOperationRequest));
141164
CompletableFuture<APostOperationResponse> whenCompleted = executeFuture.whenComplete((r, e) -> {
142165
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
@@ -180,6 +203,50 @@ private static List<MetricPublisher> resolveMetricPublishers(SdkClientConfigurat
180203
return publishers;
181204
}
182205

206+
private List<AuthSchemeOption> resolveAuthSchemeOptions(SdkRequest request, String operationName,
207+
SdkClientConfiguration clientConfiguration) {
208+
QueryToJsonCompatibleAuthSchemeProvider authSchemeProvider = Validate.isInstanceOf(
209+
QueryToJsonCompatibleAuthSchemeProvider.class, clientConfiguration.option(SdkClientOption.AUTH_SCHEME_PROVIDER),
210+
"Expected an instance of QueryToJsonCompatibleAuthSchemeProvider");
211+
QueryToJsonCompatibleAuthSchemeParams.Builder paramsBuilder = QueryToJsonCompatibleAuthSchemeParams.builder().operation(
212+
operationName);
213+
paramsBuilder.region(clientConfiguration.option(AwsClientOption.AWS_REGION));
214+
List<AuthSchemeOption> options = authSchemeProvider.resolveAuthScheme(paramsBuilder.build());
215+
return options;
216+
}
217+
218+
private Endpoint resolveEndpoint(SdkRequest request, ExecutionAttributes executionAttributes, String operationName) {
219+
QueryToJsonCompatibleEndpointProvider provider = (QueryToJsonCompatibleEndpointProvider) executionAttributes
220+
.getAttribute(SdkInternalExecutionAttribute.ENDPOINT_PROVIDER);
221+
try {
222+
QueryToJsonCompatibleEndpointParams endpointParams = QueryToJsonCompatibleEndpointResolverUtils.ruleParams(request,
223+
executionAttributes);
224+
Endpoint endpoint = provider.resolveEndpoint(endpointParams).join();
225+
if (!AwsEndpointProviderUtils.disableHostPrefixInjection(executionAttributes)) {
226+
Optional<String> hostPrefix = QueryToJsonCompatibleEndpointResolverUtils.hostPrefix(operationName, request);
227+
if (hostPrefix.isPresent()) {
228+
endpoint = AwsEndpointProviderUtils.addHostPrefix(endpoint, hostPrefix.get());
229+
}
230+
}
231+
List<EndpointAuthScheme> endpointAuthSchemes = endpoint.attribute(AwsEndpointAttribute.AUTH_SCHEMES);
232+
SelectedAuthScheme<?> selectedAuthScheme = executionAttributes
233+
.getAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME);
234+
if (endpointAuthSchemes != null && selectedAuthScheme != null) {
235+
selectedAuthScheme = QueryToJsonCompatibleEndpointResolverUtils.authSchemeWithEndpointSignerProperties(
236+
endpointAuthSchemes, selectedAuthScheme);
237+
executionAttributes.putAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME, selectedAuthScheme);
238+
}
239+
QueryToJsonCompatibleEndpointResolverUtils.setMetricValues(endpoint, executionAttributes);
240+
return endpoint;
241+
} catch (CompletionException e) {
242+
Throwable cause = e.getCause();
243+
if (cause instanceof SdkClientException) {
244+
throw (SdkClientException) cause;
245+
}
246+
throw SdkClientException.create("Endpoint resolution failed: " + cause.getMessage(), cause);
247+
}
248+
}
249+
183250
private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Builder configuration) {
184251
ClientOverrideConfiguration.Builder builder = configuration.asOverrideConfigurationBuilder();
185252
RetryMode retryMode = builder.retryMode();

0 commit comments

Comments
 (0)