From f4e0ae5b7876cc737bf7aaab22be4309fbdd1b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Sugawara=20=28=E2=88=A9=EF=BD=80-=C2=B4=29?= =?UTF-8?q?=E2=8A=83=E2=94=81=E7=82=8E=E7=82=8E=E7=82=8E=E7=82=8E=E7=82=8E?= Date: Tue, 10 Oct 2023 14:13:07 -0700 Subject: [PATCH 1/2] Add tests to override configuration with plugins --- .../poet/builder/BaseClientBuilderClass.java | 2 + .../codegen/poet/client/AsyncClientClass.java | 1 + ...kClientConfigurationUtilGeneratorTask.java | 2 +- .../ServiceClientConfigurationUtils.java | 9 - .../SdkClientConfigurationUtil.java.resource | 132 ---------- .../SdkClientConfigurationUtil.resource.java | 103 ++++++++ ...test-bearer-auth-client-builder-class.java | 2 + .../sra/test-client-builder-class.java | 2 + ...-client-builder-endpoints-auth-params.java | 2 + ...lient-builder-internal-defaults-class.java | 2 + ...-composed-sync-default-client-builder.java | 2 + ...test-no-auth-ops-client-builder-class.java | 2 + ...-no-auth-service-client-builder-class.java | 2 + .../sra/test-query-client-builder-class.java | 2 + ...test-bearer-auth-client-builder-class.java | 2 + .../builder/test-client-builder-class.java | 2 + ...-client-builder-endpoints-auth-params.java | 2 + ...lient-builder-internal-defaults-class.java | 2 + ...-composed-sync-default-client-builder.java | 2 + ...test-no-auth-ops-client-builder-class.java | 2 + ...-no-auth-service-client-builder-class.java | 2 + .../test-query-client-builder-class.java | 2 + .../sra/test-aws-json-async-client-class.java | 1 + .../sra/test-json-async-client-class.java | 1 + .../client/sra/test-json-client-class.java | 1 + .../sra/test-query-async-client-class.java | 1 + .../client/sra/test-query-client-class.java | 1 + .../sra/test-xml-async-client-class.java | 1 + .../client/sra/test-xml-client-class.java | 1 + .../test-aws-json-async-client-class.java | 1 + ...ry-compatible-json-async-client-class.java | 1 + ...ery-compatible-json-sync-client-class.java | 1 + .../test-customservicemetadata-async.java | 1 + .../test-customservicemetadata-sync.java | 1 + .../client/test-endpoint-discovery-async.java | 1 + .../client/test-endpoint-discovery-sync.java | 1 + .../client/test-json-async-client-class.java | 1 + .../poet/client/test-json-client-class.java | 1 + .../client/test-query-async-client-class.java | 1 + .../poet/client/test-query-client-class.java | 1 + .../client/test-xml-async-client-class.java | 1 + .../poet/client/test-xml-client-class.java | 1 + .../serviceclientconfiguration-builder.java | 2 - .../core/SdkServiceClientConfiguration.java | 13 + ...CodegenServiceClientConfigurationTest.java | 4 +- .../OverrideConfigurationPluginsTest.java | 142 +++++++++++ ...ceClientConfigurationUsingPluginsTest.java | 226 ++++++++++++++++++ 47 files changed, 543 insertions(+), 145 deletions(-) delete mode 100644 codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.java.resource create mode 100644 codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.resource.java create mode 100644 test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/OverrideConfigurationPluginsTest.java create mode 100644 test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/serviceclientconfiguration/ServiceClientConfigurationUsingPluginsTest.java diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java index ae8ae8fc5dcb..e54b681c5b03 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/builder/BaseClientBuilderClass.java @@ -744,9 +744,11 @@ private MethodSpec invokePluginsMethod() { .endControlFlow(); builder.addStatement("$1T.BuilderInternal serviceConfigBuilder = $1T.builder(config.toBuilder())", configurationUtils.serviceClientConfigurationBuilderClassName()); + builder.addStatement("serviceConfigBuilder.overrideConfiguration(overrideConfiguration())"); builder.beginControlFlow("for ($T plugin : plugins)", SdkPlugin.class) .addStatement("plugin.configureClient(serviceConfigBuilder)") .endControlFlow(); + builder.addStatement("overrideConfiguration(serviceConfigBuilder.overrideConfiguration())"); builder.addStatement("return serviceConfigBuilder.buildSdkClientConfiguration()"); return builder.build(); } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java index dfb62fd11cbf..9c3a8b8127d2 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java @@ -300,6 +300,7 @@ protected static MethodSpec updateSdkClientConfigurationMethod( .endControlFlow(); builder.addStatement("$1T.BuilderInternal serviceConfigBuilder = $1T.builder(clientConfiguration.toBuilder())", serviceClientConfigurationBuilderClassName); + builder.addStatement("serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration())"); builder.beginControlFlow("for ($T plugin : plugins)", SdkPlugin.class) .addStatement("plugin.configureClient(serviceConfigBuilder)") .endControlFlow(); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtilGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtilGeneratorTask.java index fb3897bbf6f8..46b9f0233212 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtilGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtilGeneratorTask.java @@ -57,7 +57,7 @@ protected List createTasks() throws Exception { private static String loadConfigUtilCode() { try { InputStream is = SdkClientConfigurationUtilGeneratorTask.class.getResourceAsStream( - "/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.java.resource"); + "/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.resource.java"); return IoUtils.toUtf8String(is); } catch (IOException ioe) { throw new UncheckedIOException(ioe); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/ServiceClientConfigurationUtils.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/ServiceClientConfigurationUtils.java index fc0719857795..6e2d33f15ae5 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/ServiceClientConfigurationUtils.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/ServiceClientConfigurationUtils.java @@ -102,15 +102,6 @@ private Field overrideConfigurationField() { .doc("client override configuration") .definingClass(SdkServiceClientConfiguration.class); - builder.constructFromConfiguration( - CodeBlock.builder() - .addStatement("this.overrideConfiguration = $T.copyConfigurationToOverrides(" - + "$T.builder(), internalBuilder).build()", - sdkClientConfigurationUtilClassName, - ClientOverrideConfiguration.class) - .build() - ); - builder.copyToConfiguration( CodeBlock.builder() .beginControlFlow("if (overrideConfiguration != null)") diff --git a/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.java.resource b/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.java.resource deleted file mode 100644 index f28dfe5feae8..000000000000 --- a/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.java.resource +++ /dev/null @@ -1,132 +0,0 @@ - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.Supplier; -import software.amazon.awssdk.annotations.SdkInternalApi; -import software.amazon.awssdk.core.SdkPlugin; -import software.amazon.awssdk.core.SdkServiceClientConfiguration; -import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; -import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; -import software.amazon.awssdk.core.client.config.SdkClientConfiguration; -import software.amazon.awssdk.core.client.config.SdkClientOption; -import software.amazon.awssdk.core.interceptor.ExecutionAttributes; -import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; -import software.amazon.awssdk.core.internal.SdkInternalTestAdvancedClientOption; -import software.amazon.awssdk.core.signer.Signer; -import software.amazon.awssdk.metrics.MetricPublisher; -import software.amazon.awssdk.profiles.ProfileFileSupplier; - -@SdkInternalApi -public final class SdkClientConfigurationUtil { - private SdkClientConfigurationUtil() { - } - - /** - * Copies the {@link ClientOverrideConfiguration} values to the configuration builder. - */ - public static SdkClientConfiguration.Builder copyOverridesToConfiguration( - ClientOverrideConfiguration overrides, - SdkClientConfiguration.Builder builder - ) { - - // misc - builder.option(SdkClientOption.ADDITIONAL_HTTP_HEADERS, overrides.headers()); - builder.option(SdkClientOption.RETRY_POLICY, overrides.retryPolicy().orElse(null)); - builder.option(SdkClientOption.API_CALL_TIMEOUT, overrides.apiCallTimeout().orElse(null)); - builder.option(SdkClientOption.API_CALL_ATTEMPT_TIMEOUT, overrides.apiCallAttemptTimeout().orElse(null)); - builder.option(SdkClientOption.SCHEDULED_EXECUTOR_SERVICE, overrides.scheduledExecutorService().orElse(null)); - builder.option(SdkClientOption.EXECUTION_INTERCEPTORS, overrides.executionInterceptors()); - builder.option(SdkClientOption.EXECUTION_ATTRIBUTES, overrides.executionAttributes()); - - // advanced option - Signer signer = overrides.advancedOption(SdkAdvancedClientOption.SIGNER).orElse(null); - if (signer != null) { - builder.option(SdkAdvancedClientOption.SIGNER, signer); - builder.option(SdkClientOption.SIGNER_OVERRIDDEN, true); - } - builder.option(SdkAdvancedClientOption.USER_AGENT_SUFFIX, - overrides.advancedOption(SdkAdvancedClientOption.USER_AGENT_SUFFIX).orElse(null)); - builder.option(SdkAdvancedClientOption.USER_AGENT_PREFIX, - overrides.advancedOption(SdkAdvancedClientOption.USER_AGENT_PREFIX).orElse(null)); - builder.option(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION, - overrides.advancedOption(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION).orElse(null)); - overrides.advancedOption(SdkInternalTestAdvancedClientOption.ENDPOINT_OVERRIDDEN_OVERRIDE).ifPresent(value -> { - builder.option(SdkClientOption.ENDPOINT_OVERRIDDEN, value); - }); - - // profile - builder.option(SdkClientOption.PROFILE_FILE_SUPPLIER, overrides.defaultProfileFile() - .map(ProfileFileSupplier::fixedProfileFile) - .orElse(null)); - builder.option(SdkClientOption.PROFILE_NAME, overrides.defaultProfileName().orElse(null)); - - // misc - builder.option(SdkClientOption.METRIC_PUBLISHERS, overrides.metricPublishers()); - builder.option(SdkAdvancedClientOption.TOKEN_SIGNER, - overrides.advancedOption(SdkAdvancedClientOption.TOKEN_SIGNER).orElse(null)); - builder.option(SdkClientOption.COMPRESSION_CONFIGURATION, overrides.compressionConfiguration().orElse(null)); - - return builder; - } - - /** - * Copies the {@link SdkClientConfiguration} values to the {@link ClientOverrideConfiguration.Builder} builder - *

- * NOTE make sure to mirror the properties in the method above or create a new abstraction to avoid this coupling. - */ - public static ClientOverrideConfiguration.Builder copyConfigurationToOverrides( - ClientOverrideConfiguration.Builder clientOverrides, - SdkClientConfiguration.Builder clientConfiguration - ) { - // misc - Map> additionalHeaders = clientConfiguration.option(SdkClientOption.ADDITIONAL_HTTP_HEADERS); - if (additionalHeaders != null) { - clientOverrides.headers(additionalHeaders); - } - clientOverrides.retryPolicy(clientConfiguration.option(SdkClientOption.RETRY_POLICY)); - clientOverrides.apiCallTimeout(clientConfiguration.option(SdkClientOption.API_CALL_TIMEOUT)); - clientOverrides.apiCallAttemptTimeout(clientConfiguration.option(SdkClientOption.API_CALL_ATTEMPT_TIMEOUT)); - clientOverrides.scheduledExecutorService(clientConfiguration.option(SdkClientOption.SCHEDULED_EXECUTOR_SERVICE)); - List executionInterceptors = clientConfiguration.option(SdkClientOption.EXECUTION_INTERCEPTORS); - if (executionInterceptors != null) { - clientOverrides.executionInterceptors(executionInterceptors); - } - ExecutionAttributes executionAttributes = clientConfiguration.option(SdkClientOption.EXECUTION_ATTRIBUTES); - if (executionAttributes != null) { - clientOverrides.executionAttributes(executionAttributes); - } - - // advanced option - if (Boolean.TRUE.equals(clientConfiguration.option(SdkClientOption.SIGNER_OVERRIDDEN))) { - Signer signer = clientConfiguration.option(SdkAdvancedClientOption.SIGNER); - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.SIGNER, signer); - } - - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.USER_AGENT_SUFFIX, - clientConfiguration.option(SdkAdvancedClientOption.USER_AGENT_SUFFIX)); - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.USER_AGENT_PREFIX, - clientConfiguration.option(SdkAdvancedClientOption.USER_AGENT_PREFIX)); - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION, - clientConfiguration.option(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION)); - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION, - clientConfiguration.option(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION)); - clientOverrides.putAdvancedOption(SdkAdvancedClientOption.TOKEN_SIGNER, - clientConfiguration.option(SdkAdvancedClientOption.TOKEN_SIGNER)); - - // profile - Optional.ofNullable(clientConfiguration.option(SdkClientOption.PROFILE_FILE_SUPPLIER)) - .map(Supplier::get) - .ifPresent(clientOverrides::defaultProfileFile); - - // misc - clientOverrides.defaultProfileName(clientConfiguration.option(SdkClientOption.PROFILE_NAME)); - List metricPublishers = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHERS); - if (metricPublishers != null) { - clientOverrides.metricPublishers(metricPublishers); - } - clientOverrides.compressionConfiguration(clientConfiguration.option(SdkClientOption.COMPRESSION_CONFIGURATION)); - - return clientOverrides; - } -} diff --git a/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.resource.java b/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.resource.java new file mode 100644 index 000000000000..f5602795ad45 --- /dev/null +++ b/codegen/src/main/resources/software/amazon/awssdk/codegen/poet/model/SdkClientConfigurationUtil.resource.java @@ -0,0 +1,103 @@ + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.core.client.config.ClientOption; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; +import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; +import software.amazon.awssdk.core.client.config.SdkClientConfiguration; +import software.amazon.awssdk.core.client.config.SdkClientOption; +import software.amazon.awssdk.core.internal.SdkInternalTestAdvancedClientOption; +import software.amazon.awssdk.core.signer.Signer; +import software.amazon.awssdk.profiles.ProfileFile; +import software.amazon.awssdk.profiles.ProfileFileSupplier; + +@SdkInternalApi +public final class SdkClientConfigurationUtil { + private SdkClientConfigurationUtil() { + } + + /** + * Copies the {@link ClientOverrideConfiguration} values to the configuration builder. + */ + public static SdkClientConfiguration.Builder copyOverridesToConfiguration(ClientOverrideConfiguration overrides, + SdkClientConfiguration.Builder builder) { + + // misc + setClientOption(builder, SdkClientOption.ADDITIONAL_HTTP_HEADERS, overrides.headers()); + setClientOption(builder, SdkClientOption.RETRY_POLICY, overrides.retryPolicy()); + setClientOption(builder, SdkClientOption.API_CALL_TIMEOUT, overrides.apiCallTimeout()); + setClientOption(builder, SdkClientOption.API_CALL_ATTEMPT_TIMEOUT, overrides.apiCallAttemptTimeout()); + setClientOption(builder, SdkClientOption.SCHEDULED_EXECUTOR_SERVICE, overrides.scheduledExecutorService()); + setClientListOption(builder, SdkClientOption.EXECUTION_INTERCEPTORS, overrides.executionInterceptors()); + setClientOption(builder, SdkClientOption.EXECUTION_ATTRIBUTES, overrides.executionAttributes()); + + // advanced option + Signer signer = overrides.advancedOption(SdkAdvancedClientOption.SIGNER).orElse(null); + if (signer != null) { + builder.option(SdkAdvancedClientOption.SIGNER, signer); + builder.option(SdkClientOption.SIGNER_OVERRIDDEN, true); + } + setClientOption(builder, SdkAdvancedClientOption.USER_AGENT_SUFFIX, + overrides.advancedOption(SdkAdvancedClientOption.USER_AGENT_SUFFIX)); + setClientOption(builder, SdkAdvancedClientOption.USER_AGENT_PREFIX, + overrides.advancedOption(SdkAdvancedClientOption.USER_AGENT_PREFIX)); + setClientOption(builder, SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION, + overrides.advancedOption(SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION)); + overrides.advancedOption(SdkInternalTestAdvancedClientOption.ENDPOINT_OVERRIDDEN_OVERRIDE).ifPresent(value -> { + builder.option(SdkClientOption.ENDPOINT_OVERRIDDEN, value); + }); + + // profile + ProfileFile profileFile = overrides.defaultProfileFile().orElse(null); + if (profileFile != null) { + builder.option(SdkClientOption.PROFILE_FILE_SUPPLIER, ProfileFileSupplier.fixedProfileFile(profileFile)); + } + setClientOption(builder, SdkClientOption.PROFILE_NAME, overrides.defaultProfileName()); + + // misc + setClientListOption(builder, SdkClientOption.METRIC_PUBLISHERS, overrides.metricPublishers()); + setClientOption(builder, SdkAdvancedClientOption.TOKEN_SIGNER, + overrides.advancedOption(SdkAdvancedClientOption.TOKEN_SIGNER)); + setClientOption(builder, SdkClientOption.COMPRESSION_CONFIGURATION, overrides.compressionConfiguration()); + + return builder; + } + + static void setClientOption(SdkClientConfiguration.Builder builder, ClientOption option, T newValue) { + if (newValue != null) { + T oldValue = builder.option(option); + if (oldValue == null || !oldValue.equals(newValue)) { + builder.option(option, newValue); + } + } + } + + static void setClientOption(SdkClientConfiguration.Builder builder, ClientOption option, Optional newValueOpt) { + setClientOption(builder, option, newValueOpt.orElse(null)); + } + + static void setClientListOption(SdkClientConfiguration.Builder builder, ClientOption> option, List newValue) { + if (newValue == null || newValue.isEmpty()) { + return; + } + List oldValue = builder.option(option); + if (oldValue == null || oldValue.isEmpty()) { + builder.option(option, newValue); + return; + } + // Make sure that we don't override derived values or duplicate existing ones. + List result = new ArrayList<>(oldValue); + Set dedup = new HashSet<>(); + dedup.addAll(oldValue); + for (T value : newValue) { + if (!dedup.contains(value)) { + result.add(value); + } + } + builder.option(option, result); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-bearer-auth-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-bearer-auth-client-builder-class.java index 14abf2800caa..ee0924b32937 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-bearer-auth-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-bearer-auth-client-builder-class.java @@ -138,9 +138,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-class.java index 2873e5d9b8b1..a59675c102b6 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-class.java @@ -220,9 +220,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java index 398af1ebd05c..322429dc737a 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-endpoints-auth-params.java @@ -159,9 +159,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-internal-defaults-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-internal-defaults-class.java index e4dcc66ed6dd..217c98e28c7c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-internal-defaults-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-client-builder-internal-defaults-class.java @@ -130,9 +130,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-composed-sync-default-client-builder.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-composed-sync-default-client-builder.java index 6a2270e9e6d9..53bac0194568 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-composed-sync-default-client-builder.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-composed-sync-default-client-builder.java @@ -165,9 +165,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-ops-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-ops-client-builder-class.java index 4f6770cd2746..25bcbb6adaaf 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-ops-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-ops-client-builder-class.java @@ -125,9 +125,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-service-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-service-client-builder-class.java index a59a72831455..516e0f2202a4 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-service-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-no-auth-service-client-builder-class.java @@ -119,9 +119,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java index 44db16045035..1b793ebbd783 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/sra/test-query-client-builder-class.java @@ -156,9 +156,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-bearer-auth-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-bearer-auth-client-builder-class.java index 7e09bab84780..cbe8292bdcfc 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-bearer-auth-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-bearer-auth-client-builder-class.java @@ -108,9 +108,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java index f8e9cb2f565e..c5c623dec7f9 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java @@ -193,9 +193,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java index 1c191636bfed..15a3b171ec0f 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-endpoints-auth-params.java @@ -130,9 +130,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-internal-defaults-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-internal-defaults-class.java index e56a7fdfed51..bf5b9701d42f 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-internal-defaults-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-internal-defaults-class.java @@ -101,9 +101,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-composed-sync-default-client-builder.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-composed-sync-default-client-builder.java index 919996339758..da13e25a7e0b 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-composed-sync-default-client-builder.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-composed-sync-default-client-builder.java @@ -138,9 +138,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-ops-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-ops-client-builder-class.java index b07f28396dd8..c8e43faa5e44 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-ops-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-ops-client-builder-class.java @@ -93,9 +93,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-service-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-service-client-builder-class.java index a03b4f4dd59b..cc5f0b4838d8 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-service-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-no-auth-service-client-builder-class.java @@ -84,9 +84,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } DatabaseServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = DatabaseServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java index 1c191636bfed..15a3b171ec0f 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-query-client-builder-class.java @@ -130,9 +130,11 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) { } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(config.toBuilder()); + serviceConfigBuilder.overrideConfiguration(overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } + overrideConfiguration(serviceConfigBuilder.overrideConfiguration()); return serviceConfigBuilder.buildSdkClientConfiguration(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-aws-json-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-aws-json-async-client-class.java index 644af75b82d1..91796708f1fa 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-aws-json-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-aws-json-async-client-class.java @@ -1155,6 +1155,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-async-client-class.java index 9f6800a21122..fcf179fb3839 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-async-client-class.java @@ -1332,6 +1332,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-client-class.java index d32a5034db74..dcb5386bfdf9 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-client-class.java @@ -902,6 +902,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-async-client-class.java index 24671629784b..2a4d4cbcadce 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-async-client-class.java @@ -909,6 +909,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-client-class.java index 4cb14dac3b11..7b97aeeba6c1 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-client-class.java @@ -777,6 +777,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-async-client-class.java index bd35edf6ce9e..27db7b8869d4 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-async-client-class.java @@ -870,6 +870,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } XmlServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = XmlServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-client-class.java index 111a49d71065..fb581b307b69 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-xml-client-class.java @@ -652,6 +652,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } XmlServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = XmlServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-json-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-json-async-client-class.java index 33903dc81dd0..990c0975df28 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-json-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-json-async-client-class.java @@ -1186,6 +1186,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-async-client-class.java index ad4eb2e7fa30..014cfd0deab6 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-async-client-class.java @@ -171,6 +171,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryToJsonCompatibleServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryToJsonCompatibleServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-sync-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-sync-client-class.java index 8adf0b40f246..ab894b63f6b0 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-sync-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-aws-query-compatible-json-sync-client-class.java @@ -146,6 +146,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryToJsonCompatibleServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryToJsonCompatibleServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-async.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-async.java index e5b4e43350ed..d1f818467382 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-async.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-async.java @@ -154,6 +154,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } ProtocolRestJsonWithCustomContentTypeServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = ProtocolRestJsonWithCustomContentTypeServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-sync.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-sync.java index cbb33a8126aa..e4ae29440602 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-sync.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-customservicemetadata-sync.java @@ -135,6 +135,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } ProtocolRestJsonWithCustomContentTypeServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = ProtocolRestJsonWithCustomContentTypeServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-async.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-async.java index 17812b0abbe1..8aec80ff2293 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-async.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-async.java @@ -408,6 +408,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } EndpointDiscoveryTestServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = EndpointDiscoveryTestServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-sync.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-sync.java index fe68b1145691..2b851d9d1514 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-sync.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-endpoint-discovery-sync.java @@ -351,6 +351,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } EndpointDiscoveryTestServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = EndpointDiscoveryTestServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-class.java index b827008d5a75..b1799445416c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-class.java @@ -1367,6 +1367,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-class.java index c094e12130f1..1e226d39cb44 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-class.java @@ -922,6 +922,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } JsonServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = JsonServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-async-client-class.java index 26fba0f78d57..7d9e3b881cca 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-async-client-class.java @@ -938,6 +938,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-client-class.java index f9a870fadeb1..a1497e0f4d73 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-query-client-class.java @@ -795,6 +795,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } QueryServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = QueryServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-async-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-async-client-class.java index 3ea104bc554d..a904abf79cc7 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-async-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-async-client-class.java @@ -899,6 +899,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } XmlServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = XmlServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-client-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-client-class.java index d818b15ae43b..2d485610e4a6 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-client-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-xml-client-class.java @@ -670,6 +670,7 @@ private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, } XmlServiceClientConfigurationBuilder.BuilderInternal serviceConfigBuilder = XmlServiceClientConfigurationBuilder .builder(clientConfiguration.toBuilder()); + serviceConfigBuilder.overrideConfiguration(serviceClientConfiguration.overrideConfiguration()); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/serviceclientconfiguration-builder.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/serviceclientconfiguration-builder.java index b3c660909e86..a5e6064a8462 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/serviceclientconfiguration-builder.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/serviceclientconfiguration-builder.java @@ -53,8 +53,6 @@ private BuilderImpl() { private BuilderImpl(SdkClientConfiguration.Builder internalBuilder) { this.internalBuilder = internalBuilder; - this.overrideConfiguration = SdkClientConfigurationUtil.copyConfigurationToOverrides( - ClientOverrideConfiguration.builder(), internalBuilder).build(); if (Boolean.TRUE.equals(internalBuilder.option(SdkClientOption.ENDPOINT_OVERRIDDEN))) { this.endpointOverride = internalBuilder.option(SdkClientOption.ENDPOINT); } diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java index 7d727d4069fd..864451993531 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java @@ -18,6 +18,7 @@ import java.net.URI; import java.util.Objects; import java.util.Optional; +import java.util.function.Consumer; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.endpoints.EndpointProvider; @@ -119,6 +120,18 @@ default Builder overrideConfiguration(ClientOverrideConfiguration clientOverride throw new UnsupportedOperationException(); } + default Builder overrideConfiguration(Consumer consumer) { + ClientOverrideConfiguration overrideConfiguration = overrideConfiguration(); + ClientOverrideConfiguration.Builder overrideConfigurationBuilder; + if (overrideConfiguration != null) { + overrideConfigurationBuilder = overrideConfiguration.toBuilder(); + } else { + overrideConfigurationBuilder = ClientOverrideConfiguration.builder(); + } + consumer.accept(overrideConfigurationBuilder); + return overrideConfiguration(overrideConfigurationBuilder.build()); + } + /** * Configure the endpoint override */ diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/CodegenServiceClientConfigurationTest.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/CodegenServiceClientConfigurationTest.java index 9e45f40f64f2..dec91ee2a147 100644 --- a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/CodegenServiceClientConfigurationTest.java +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/CodegenServiceClientConfigurationTest.java @@ -82,7 +82,9 @@ void externalInternalTransforms_preserves_propertyValues(TestCase testCas ProtocolRestJsonServiceClientConfigurationBuilder.builder(clientConfig.toBuilder()); // Assert that we can retrieve the same value - assertThat(testCase.getter.apply(anotherBuilder)).isEqualTo(testCase.value); + if (testCase.hasDirectMapping) { + assertThat(testCase.getter.apply(anotherBuilder)).isEqualTo(testCase.value); + } } public static List> testCases() throws Exception { diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/OverrideConfigurationPluginsTest.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/OverrideConfigurationPluginsTest.java new file mode 100644 index 000000000000..2184416cdc95 --- /dev/null +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/OverrideConfigurationPluginsTest.java @@ -0,0 +1,142 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.services; + +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.core.SdkPlugin; +import software.amazon.awssdk.core.interceptor.Context; +import software.amazon.awssdk.core.interceptor.ExecutionAttributes; +import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersAsyncClient; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersAsyncClientBuilder; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersClient; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersClientBuilder; +import software.amazon.awssdk.services.restjsonendpointproviders.RestJsonEndpointProvidersServiceClientConfiguration; +import software.amazon.awssdk.utils.Validate; + +public class OverrideConfigurationPluginsTest { + private CapturingInterceptor interceptor; + + @BeforeEach + void setup() { + this.interceptor = new CapturingInterceptor(); + } + + @Test + void sync_pluginsClientOverrideConfiguration_isAddedToRequest() { + RestJsonEndpointProvidersClient syncClient = syncClientBuilder() + .addPlugin(config -> config.overrideConfiguration(c -> c.addExecutionInterceptor(interceptor) + .putHeader("K1", "V1"))) + .build(); + assertThatThrownBy(() -> syncClient.allTypes(r -> { + })) + .hasMessageContaining("boom!"); + + assertThat(interceptor.context.httpRequest().headers()).containsEntry("K1", singletonList("V1")); + } + + @Test + void sync_pluginsRequestOverrideConfiguration_isAddedToRequest() { + RestJsonEndpointProvidersClient syncClient = syncClientBuilder().build(); + SdkPlugin plugin = config -> config.overrideConfiguration(c -> c.putHeader("K1", "V1")); + assertThatThrownBy(() -> syncClient.allTypes(r -> r.overrideConfiguration(c -> c.addPlugin(plugin)))) + .hasMessageContaining("boom!"); + + assertThat(interceptor.context.httpRequest().headers()).containsEntry("K1", singletonList("V1")); + } + + @Test + void async_pluginsClientOverrideConfiguration_isAddedToRequest() { + RestJsonEndpointProvidersAsyncClient syncClient = asyncClientBuilder() + .addPlugin(config -> config.overrideConfiguration(c -> c.addExecutionInterceptor(interceptor) + .putHeader("K1", "V1"))) + .build(); + assertThatThrownBy(() -> syncClient.allTypes(r -> { + }).join()) + .hasMessageContaining("boom!"); + + assertThat(interceptor.context.httpRequest().headers()).containsEntry("K1", singletonList("V1")); + } + + @Test + void async_pluginsRequestOverrideConfiguration_isAddedToRequest() { + RestJsonEndpointProvidersAsyncClient syncClient = asyncClientBuilder().build(); + SdkPlugin plugin = config -> config.overrideConfiguration(c -> c.putHeader("K1", "V1")); + assertThatThrownBy(() -> syncClient.allTypes(r -> r.overrideConfiguration(c -> c.addPlugin(plugin))) + .join()) + .hasMessageContaining("boom!"); + + assertThat(interceptor.context.httpRequest().headers()).containsEntry("K1", singletonList("V1")); + } + + private RestJsonEndpointProvidersClientBuilder syncClientBuilder() { + return RestJsonEndpointProvidersClient + .builder() + .addPlugin(c -> { + RestJsonEndpointProvidersServiceClientConfiguration.Builder config = + Validate.isInstanceOf(RestJsonEndpointProvidersServiceClientConfiguration.Builder.class, c, "\uD83E\uDD14"); + config.region(Region.US_WEST_2) + .credentialsProvider( + StaticCredentialsProvider.create( + AwsBasicCredentials.create("akid", "skid"))) + .overrideConfiguration(oc -> oc.addExecutionInterceptor(interceptor)); + }); + } + + private RestJsonEndpointProvidersAsyncClientBuilder asyncClientBuilder() { + return RestJsonEndpointProvidersAsyncClient + .builder() + .addPlugin(c -> { + RestJsonEndpointProvidersServiceClientConfiguration.Builder config = + Validate.isInstanceOf(RestJsonEndpointProvidersServiceClientConfiguration.Builder.class, c, "\uD83E\uDD14"); + config.region(Region.US_WEST_2) + .credentialsProvider( + StaticCredentialsProvider.create( + AwsBasicCredentials.create("akid", "skid"))) + .overrideConfiguration(oc -> oc.addExecutionInterceptor(interceptor)); + }); + } + + public static class CapturingInterceptor implements ExecutionInterceptor { + private Context.BeforeTransmission context; + private ExecutionAttributes executionAttributes; + + @Override + public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttributes executionAttributes) { + this.context = context; + this.executionAttributes = executionAttributes; + throw new RuntimeException("boom!"); + } + + public ExecutionAttributes executionAttributes() { + return executionAttributes; + } + + public class CaptureCompletedException extends RuntimeException { + CaptureCompletedException(String message) { + super(message); + } + } + } +} diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/serviceclientconfiguration/ServiceClientConfigurationUsingPluginsTest.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/serviceclientconfiguration/ServiceClientConfigurationUsingPluginsTest.java new file mode 100644 index 000000000000..0d0ac3ada95c --- /dev/null +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/serviceclientconfiguration/ServiceClientConfigurationUsingPluginsTest.java @@ -0,0 +1,226 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.services.serviceclientconfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.net.URI; +import java.time.Duration; +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.core.SdkPlugin; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; +import software.amazon.awssdk.endpoints.EndpointProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.protocolrestxml.ProtocolRestXmlAsyncClient; +import software.amazon.awssdk.services.protocolrestxml.ProtocolRestXmlClient; +import software.amazon.awssdk.services.protocolrestxml.ProtocolRestXmlServiceClientConfiguration; +import software.amazon.awssdk.services.protocolrestxml.endpoints.ProtocolRestXmlEndpointProvider; + +// The same battery of tests as in `ServiceClientConfigurationTest` but using plugins. +public class ServiceClientConfigurationUsingPluginsTest { + private static final SdkPlugin NOOP_PLUGIN = config -> {}; + + @Test + void syncClient_serviceClientConfiguration_shouldReturnCorrectRegion() { + SdkPlugin testPlugin = config -> { + if (config instanceof ProtocolRestXmlServiceClientConfiguration.Builder) { + ProtocolRestXmlServiceClientConfiguration.Builder builder = + (ProtocolRestXmlServiceClientConfiguration.Builder) config; + builder.region(Region.ME_SOUTH_1); + } + }; + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(testPlugin) + .build(); + + Region region = client.serviceClientConfiguration().region(); + assertThat(region).isEqualTo(Region.ME_SOUTH_1); + } + + @Test + void syncClientWithEndpointOverride_serviceClientConfiguration_shouldReturnCorrectEndpointOverride() { + URI uri = URI.create("https://www.amazon.com/"); + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(config -> config.endpointOverride(uri)) + .build(); + + URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null); + assertThat(endpointOverride).isEqualTo(uri); + } + + @Test + void syncClientWithoutEndpointOverride_serviceClientConfiguration_shouldReturnEmptyOptional() { + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(NOOP_PLUGIN) + .build(); + URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null); + assertThat(endpointOverride).isNull(); + } + + @Test + void syncClient_serviceClientConfiguration_shouldReturnCorrectClientOverrideConfigurationFields() { + ClientOverrideConfiguration overrideConfiguration = ClientOverrideConfiguration.builder() + .apiCallAttemptTimeout(Duration.ofSeconds(30)) + .apiCallTimeout(Duration.ofSeconds(90)) + .retryPolicy(c -> c.numRetries(4)) + .build(); + + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(config -> config.overrideConfiguration(overrideConfiguration)) + .build(); + + ClientOverrideConfiguration result = client.serviceClientConfiguration().overrideConfiguration(); + assertThat(result.apiCallAttemptTimeout().get()).isEqualTo(Duration.ofSeconds(30)); + assertThat(result.apiCallTimeout().get()).isEqualTo(Duration.ofSeconds(90)); + assertThat(result.retryPolicy().get().numRetries()).isEqualTo(4); + assertThat(result.defaultProfileFile()).isNotPresent(); + assertThat(result.metricPublishers()).isEmpty(); + } + + @Test + void syncClient_serviceClientConfiguration_withoutOverrideConfiguration_shouldReturnEmptyFields() { + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(NOOP_PLUGIN) + .build(); + + ClientOverrideConfiguration overrideConfiguration = client.serviceClientConfiguration().overrideConfiguration(); + assertThat(overrideConfiguration.toString()).isEqualTo( + "ClientOverrideConfiguration(headers={}, executionInterceptors=[], advancedOptions={})"); + assertThat(overrideConfiguration.apiCallAttemptTimeout()).isNotPresent(); + assertThat(overrideConfiguration.apiCallTimeout()).isNotPresent(); + assertThat(overrideConfiguration.retryPolicy()).isNotPresent(); + assertThat(overrideConfiguration.defaultProfileFile()).isNotPresent(); + assertThat(overrideConfiguration.metricPublishers()).isEmpty(); + } + + @Test + void syncClientWithEndpointProvider_serviceClientConfiguration_shouldReturnCorrectEndpointProvider() { + ProtocolRestXmlEndpointProvider clientEndpointProvider = ProtocolRestXmlEndpointProvider.defaultProvider(); + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .addPlugin(config -> config.endpointProvider(clientEndpointProvider)) + .build(); + + EndpointProvider endpointProvider = client.serviceClientConfiguration().endpointProvider().orElse(null); + assertThat(endpointProvider).isEqualTo(clientEndpointProvider); + } + + @Test + void syncClientWithoutEndpointProvider_serviceClientConfiguration_shouldReturnDefaultEndpointProvider() { + ProtocolRestXmlClient client = ProtocolRestXmlClient.builder() + .build(); + + EndpointProvider endpointProvider = client.serviceClientConfiguration().endpointProvider().orElse(null); + assertThat(endpointProvider instanceof ProtocolRestXmlEndpointProvider).isTrue(); + } + + @Test + void asyncClient_serviceClientConfiguration_shouldReturnCorrectRegion() { + SdkPlugin testPlugin = config -> { + if (config instanceof ProtocolRestXmlServiceClientConfiguration.Builder) { + ProtocolRestXmlServiceClientConfiguration.Builder builder = + (ProtocolRestXmlServiceClientConfiguration.Builder) config; + + builder.region(Region.ME_SOUTH_1); + } + }; + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(testPlugin) + .build(); + + Region region = client.serviceClientConfiguration().region(); + assertThat(region).isEqualTo(Region.ME_SOUTH_1); + } + + @Test + void asyncClientWithEndpointOverride_serviceClientConfiguration_shouldReturnCorrectEndpointOverride() { + URI uri = URI.create("https://www.amazon.com/"); + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(config -> config.endpointOverride(uri)) + .build(); + + URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null); + assertThat(endpointOverride).isEqualTo(uri); + } + + @Test + void asyncClientWithoutEndpointOverride_serviceClientConfiguration_shouldReturnEmptyOptional() { + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(NOOP_PLUGIN) + .build(); + + URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null); + assertThat(endpointOverride).isNull(); + } + + @Test + void asyncClient_serviceClientConfiguration_shouldReturnCorrectClientOverrideConfigurationFields() { + ClientOverrideConfiguration overrideConfiguration = ClientOverrideConfiguration.builder() + .apiCallAttemptTimeout(Duration.ofSeconds(30)) + .apiCallTimeout(Duration.ofSeconds(90)) + .retryPolicy(c -> c.numRetries(4)) + .build(); + + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(config -> config.overrideConfiguration(overrideConfiguration)) + .build(); + + ClientOverrideConfiguration result = client.serviceClientConfiguration().overrideConfiguration(); + assertThat(result.apiCallAttemptTimeout().get()).isEqualTo(Duration.ofSeconds(30)); + assertThat(result.apiCallTimeout().get()).isEqualTo(Duration.ofSeconds(90)); + assertThat(result.retryPolicy().get().numRetries()).isEqualTo(4); + assertThat(result.defaultProfileFile()).isNotPresent(); + assertThat(result.metricPublishers()).isEmpty(); + } + + @Test + void asyncClient_serviceClientConfiguration_withoutOverrideConfiguration_shouldReturnEmptyFields() { + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(NOOP_PLUGIN) + .build(); + + assertThat(client.serviceClientConfiguration().overrideConfiguration().toString()).isEqualTo( + "ClientOverrideConfiguration(headers={}, executionInterceptors=[], advancedOptions={})"); + ClientOverrideConfiguration result = client.serviceClientConfiguration().overrideConfiguration(); + assertThat(result.apiCallAttemptTimeout()).isNotPresent(); + assertThat(result.apiCallTimeout()).isNotPresent(); + assertThat(result.retryPolicy()).isNotPresent(); + assertThat(result.defaultProfileFile()).isNotPresent(); + assertThat(result.metricPublishers()).isEmpty(); + } + + + @Test + void asyncClientWithEndpointProvider_serviceClientConfiguration_shouldReturnCorrectEndpointProvider() { + ProtocolRestXmlEndpointProvider clientEndpointProvider = ProtocolRestXmlEndpointProvider.defaultProvider(); + SdkPlugin testPlugin = config -> config.endpointProvider(clientEndpointProvider); + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(testPlugin) + .build(); + + EndpointProvider endpointProvider = client.serviceClientConfiguration().endpointProvider().orElse(null); + assertThat(endpointProvider).isEqualTo(clientEndpointProvider); + } + + @Test + void asyncClientWithoutEndpointProvider_serviceClientConfiguration_shouldReturnDefault() { + ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder() + .addPlugin(NOOP_PLUGIN) + .build(); + + EndpointProvider endpointProvider = client.serviceClientConfiguration().endpointProvider().orElse(null); + assertThat(endpointProvider instanceof ProtocolRestXmlEndpointProvider).isTrue(); + } +} From 9838e97d7331a67e41b5e54b84ee8a6b2fb5a6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Sugawara=20=28=E2=88=A9=EF=BD=80-=C2=B4=29?= =?UTF-8?q?=E2=8A=83=E2=94=81=E7=82=8E=E7=82=8E=E7=82=8E=E7=82=8E=E7=82=8E?= Date: Tue, 10 Oct 2023 15:29:35 -0700 Subject: [PATCH 2/2] Add an suppression to SpotBugs that is getting confused about the nullability --- .../software/amazon/awssdk/spotbugs-suppressions.xml | 6 ++++++ .../awssdk/core/SdkServiceClientConfiguration.java | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml b/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml index 1ee914af1d7b..7504a880cec8 100644 --- a/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml +++ b/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml @@ -197,6 +197,12 @@ + + + + + + diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java index 864451993531..7ae46d9944c6 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkServiceClientConfiguration.java @@ -122,14 +122,14 @@ default Builder overrideConfiguration(ClientOverrideConfiguration clientOverride default Builder overrideConfiguration(Consumer consumer) { ClientOverrideConfiguration overrideConfiguration = overrideConfiguration(); - ClientOverrideConfiguration.Builder overrideConfigurationBuilder; + ClientOverrideConfiguration.Builder builder; if (overrideConfiguration != null) { - overrideConfigurationBuilder = overrideConfiguration.toBuilder(); + builder = overrideConfiguration.toBuilder(); } else { - overrideConfigurationBuilder = ClientOverrideConfiguration.builder(); + builder = ClientOverrideConfiguration.builder(); } - consumer.accept(overrideConfigurationBuilder); - return overrideConfiguration(overrideConfigurationBuilder.build()); + consumer.accept(builder); + return overrideConfiguration(builder.build()); } /**