Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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();
}

}