From 3af9e7a8ab686690e20da617c5d9cfbd06524c5c Mon Sep 17 00:00:00 2001 From: amirdeljouyi Date: Sun, 21 Jun 2026 17:22:39 +0200 Subject: [PATCH] test: add regression tests for SyncClientClass --- .../poet/client/SyncClientClassTest.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/SyncClientClassTest.java b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/SyncClientClassTest.java index f66dbe014ea7..4d52d110000c 100644 --- a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/SyncClientClassTest.java +++ b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/SyncClientClassTest.java @@ -16,6 +16,8 @@ package software.amazon.awssdk.codegen.poet.client; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.instanceOf; import static software.amazon.awssdk.codegen.poet.ClientTestModels.awsQueryCompatibleJsonServiceModels; import static software.amazon.awssdk.codegen.poet.ClientTestModels.cborServiceModels; import static software.amazon.awssdk.codegen.poet.ClientTestModels.customContentTypeModels; @@ -29,10 +31,16 @@ import static software.amazon.awssdk.codegen.poet.ClientTestModels.xmlServiceModels; import static software.amazon.awssdk.codegen.poet.PoetMatchers.generatesTo; +import java.io.IOException; import org.junit.Test; import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.model.intermediate.Protocol; import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.PoetExtension; +import software.amazon.awssdk.codegen.poet.PoetUtils; +import software.amazon.awssdk.codegen.poet.client.specs.Ec2ProtocolSpec; +import software.amazon.awssdk.codegen.poet.client.specs.ProtocolSpec; public class SyncClientClassTest { @Test @@ -105,4 +113,46 @@ public void syncClientClassWithUnsignedPayload() { assertThat(syncClientClass, generatesTo("test-unsigned-payload-trait-sync-client-class.java")); } + @Test + public void syncClientEndpointDiscovery_whenRequiredEndpointDiscoveryAllowsEndpointOverride_generatesFallbackAndWarning() + throws IOException { + IntermediateModel model = endpointDiscoveryModels(); + model.getCustomizationConfig().setAllowEndpointOverrideForEndpointDiscoveryRequiredOperations(true); + + String generatedClient = generateClass(createSyncClientClass(model)); + + String requiredOperationOverrideFallback = + "if (endpointOverridden) {\n" + + " endpointDiscoveryEnabled = false;\n" + + " } else if (!endpointDiscoveryEnabled) {\n" + + " throw new IllegalStateException(\"This operation requires endpoint discovery to be enabled, or for " + + "you to specify an endpoint override when the client is created.\");\n" + + " }"; + String constructorWarning = + "if (clientConfiguration.option(SdkClientOption.CLIENT_ENDPOINT_PROVIDER).isEndpointOverridden()) {\n" + + " log.warn(() -> \"Endpoint discovery is enabled for this client, and an endpoint override was also " + + "specified. This will disable endpoint discovery for methods that require it, instead using the specified " + + "endpoint override. This may or may not be what you intended.\");\n" + + " }"; + + assertThat(generatedClient, containsString(requiredOperationOverrideFallback)); + assertThat(generatedClient, containsString(constructorWarning)); + } + + @Test + public void getProtocolSpecs_withEc2Protocol_returnsEc2ProtocolSpec() { + IntermediateModel model = queryServiceModels(); + model.getMetadata().setProtocol(Protocol.EC2); + + ProtocolSpec protocolSpec = SyncClientClass.getProtocolSpecs(new PoetExtension(model), model); + + assertThat(protocolSpec, instanceOf(Ec2ProtocolSpec.class)); + } + + private String generateClass(ClassSpec spec) throws IOException { + StringBuilder output = new StringBuilder(); + PoetUtils.buildJavaFile(spec).writeTo(output); + return output.toString(); + } + }