diff --git a/.changelog/smoketestcodegen.md b/.changelog/smoketestcodegen.md new file mode 100644 index 0000000000..3a52c93979 --- /dev/null +++ b/.changelog/smoketestcodegen.md @@ -0,0 +1,12 @@ +--- +applies_to: + - aws-sdk-rust +authors: + - landonxjames +references: [smithy-rs#3836] +breaking: false +new_feature: false +bug_fix: true +--- + +Update Smoketest codegeneration to be endpoint built-in aware. diff --git a/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecorator.kt b/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecorator.kt index 3051ec0cf6..7166c67073 100644 --- a/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecorator.kt +++ b/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SmokeTestsDecorator.kt @@ -11,8 +11,10 @@ import software.amazon.smithy.model.node.ObjectNode import software.amazon.smithy.model.shapes.MemberShape import software.amazon.smithy.model.shapes.OperationShape import software.amazon.smithy.model.shapes.StructureShape +import software.amazon.smithy.rulesengine.language.syntax.parameters.Parameters import software.amazon.smithy.rust.codegen.client.smithy.ClientCodegenContext import software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator +import software.amazon.smithy.rust.codegen.client.smithy.endpoint.EndpointRulesetIndex import software.amazon.smithy.rust.codegen.client.smithy.generators.client.FluentClientGenerator import software.amazon.smithy.rust.codegen.core.rustlang.Attribute import software.amazon.smithy.rust.codegen.core.rustlang.Attribute.Companion.cfg @@ -42,6 +44,7 @@ import software.amazon.smithy.smoketests.traits.SmokeTestCase import software.amazon.smithy.smoketests.traits.SmokeTestsTrait import java.util.Optional import java.util.logging.Logger +import kotlin.jvm.optionals.getOrElse class SmokeTestsDecorator : ClientCodegenDecorator { override val name: String = "SmokeTests" @@ -134,7 +137,7 @@ fun renderPrologue( they are disabled by default. To enable them, run the tests with ```sh - RUSTFLAGS="--cfg smoketests" cargo test. + RUSTFLAGS="--cfg smoketests" cargo test ``` """, ) @@ -167,6 +170,17 @@ class SmokeTestsInstantiator( ) { private val model = codegenContext.model private val symbolProvider = codegenContext.symbolProvider + private val builtInParamNames: List by lazy { + val index = EndpointRulesetIndex.of(codegenContext.model) + val rulesOrNull = index.endpointRulesForService(codegenContext.serviceShape) + val builtInParams: Parameters = (rulesOrNull?.parameters ?: Parameters.builder().build()) + val temp: MutableList = mutableListOf() + builtInParams.forEach { temp.add(it.builtIn.getOrElse { "" }) } + temp + } + private val fipsName = "AWS::UseFIPS" + private val dualStackName = "AWS::UseDualStack" + private val rc = codegenContext.runtimeConfig fun render( writer: RustWriter, @@ -191,9 +205,18 @@ class SmokeTestsInstantiator( val vendorParams = AwsSmokeTestModel.getAwsVendorParams(testCase) vendorParams.orNull()?.let { params -> - rust(".region(config::Region::new(${params.region.dq()}))") - rust(".use_dual_stack(${params.useDualstack()})") - rust(".use_fips(${params.useFips()})") + rustTemplate( + ".region(#{Region}::new(${params.region.dq()}))", + "Region" to AwsRuntimeType.awsTypes(rc).resolve("region::Region"), + ) + + if (builtInParamNames.contains(dualStackName)) { + rust(".use_dual_stack(${params.useDualstack()})") + } + if (builtInParamNames.contains(fipsName)) { + rust(".use_fips(${params.useFips()})") + } + params.uri.orNull()?.let { rust(".endpoint_url($it)") } }