mirror of https://github.com/smithy-lang/smithy-rs
Update `SmokeTestDecoratorTest` (#3840)
## Motivation and Context <!--- Why is this change required? What problem does it solve? --> <!--- If it fixes an open issue, please link to the issue here --> Add tests the were skipped in https://github.com/smithy-lang/smithy-rs/pull/3836 in favor of merging and unblocking customer. ## Description <!--- Describe your changes in detail --> Testing our smoketest generator with the `UseDualStack` and `UseFips` endpoint built-ins. Previously the smoketest generator assumed that these were always available, but they are only available if those built-ins are included in the endpoints rule set of the model. We now test the smoke test with both of these built-ins, with each by itself, and with neither. ## Testing <!--- Please describe in detail how you tested your changes --> <!--- Include details of your testing environment, and the tests you ran to --> <!--- see how your change affects other areas of the code, etc. --> ## Checklist Just a test change, no changelog ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --------- Co-authored-by: ysaito1001 <awsaito@amazon.com>
This commit is contained in:
parent
b62000e4d7
commit
6b42eb5ca0
|
@ -170,6 +170,8 @@ class SmokeTestsInstantiator(
|
|||
) {
|
||||
private val model = codegenContext.model
|
||||
private val symbolProvider = codegenContext.symbolProvider
|
||||
|
||||
// Get list of the built-ins actually included in the model
|
||||
private val builtInParamNames: List<String> by lazy {
|
||||
val index = EndpointRulesetIndex.of(codegenContext.model)
|
||||
val rulesOrNull = index.endpointRulesForService(codegenContext.serviceShape)
|
||||
|
@ -210,6 +212,8 @@ class SmokeTestsInstantiator(
|
|||
"Region" to AwsRuntimeType.awsTypes(rc).resolve("region::Region"),
|
||||
)
|
||||
|
||||
// The `use_dual_stack` and `use_fips` fields will only exist on the endpoint params if they built-ins are
|
||||
// included in the model, so we check for that before setting them.
|
||||
if (builtInParamNames.contains(dualStackName)) {
|
||||
rust(".use_dual_stack(${params.useDualstack()})")
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ package software.amazon.smithy.rustsdk
|
|||
|
||||
import org.junit.jupiter.api.Test
|
||||
import software.amazon.smithy.build.PluginContext
|
||||
import software.amazon.smithy.model.Model
|
||||
import software.amazon.smithy.rust.codegen.client.smithy.ClientCodegenVisitor
|
||||
import software.amazon.smithy.rust.codegen.client.smithy.customizations.NoAuthDecorator
|
||||
import software.amazon.smithy.rust.codegen.client.smithy.customize.ClientCodegenDecorator
|
||||
|
@ -24,8 +25,7 @@ import software.amazon.smithy.rust.codegen.core.util.toSnakeCase
|
|||
|
||||
class SmokeTestsDecoratorTest {
|
||||
companion object {
|
||||
val model =
|
||||
"""
|
||||
val imports = """
|
||||
namespace test
|
||||
|
||||
use aws.api#service
|
||||
|
@ -33,7 +33,96 @@ class SmokeTestsDecoratorTest {
|
|||
use aws.auth#sigv4
|
||||
use aws.protocols#restJson1
|
||||
use smithy.rules#endpointRuleSet
|
||||
"""
|
||||
val traitsWithAllBuiltIns =
|
||||
"""
|
||||
@service(sdkId: "dontcare")
|
||||
@restJson1
|
||||
@sigv4(name: "dontcare")
|
||||
@auth([sigv4])
|
||||
@endpointRuleSet({
|
||||
"version": "1.0",
|
||||
"rules": [{ "type": "endpoint", "conditions": [], "endpoint": { "url": "https://example.com" } }],
|
||||
"parameters": {
|
||||
"Region": { "required": false, "type": "String", "builtIn": "AWS::Region" },
|
||||
"Endpoint": {
|
||||
"builtIn": "SDK::Endpoint",
|
||||
"required": false,
|
||||
"documentation": "Override the endpoint used to send this request",
|
||||
"type": "String"
|
||||
},
|
||||
"UseFIPS": {
|
||||
"builtIn": "AWS::UseFIPS",
|
||||
"required": true,
|
||||
"default": false,
|
||||
"type": "Boolean"
|
||||
},
|
||||
"UseDualStack": {
|
||||
"builtIn": "AWS::UseDualStack",
|
||||
"required": true,
|
||||
"default": false,
|
||||
"type": "Boolean"
|
||||
},
|
||||
}
|
||||
})
|
||||
"""
|
||||
|
||||
val traitsWithNoDualStack =
|
||||
"""
|
||||
@service(sdkId: "dontcare")
|
||||
@restJson1
|
||||
@sigv4(name: "dontcare")
|
||||
@auth([sigv4])
|
||||
@endpointRuleSet({
|
||||
"version": "1.0",
|
||||
"rules": [{ "type": "endpoint", "conditions": [], "endpoint": { "url": "https://example.com" } }],
|
||||
"parameters": {
|
||||
"Region": { "required": false, "type": "String", "builtIn": "AWS::Region" },
|
||||
"Endpoint": {
|
||||
"builtIn": "SDK::Endpoint",
|
||||
"required": false,
|
||||
"documentation": "Override the endpoint used to send this request",
|
||||
"type": "String"
|
||||
},
|
||||
"UseFIPS": {
|
||||
"builtIn": "AWS::UseFIPS",
|
||||
"required": true,
|
||||
"default": false,
|
||||
"type": "Boolean"
|
||||
},
|
||||
}
|
||||
})
|
||||
"""
|
||||
|
||||
val traitsWithNoFips =
|
||||
"""
|
||||
@service(sdkId: "dontcare")
|
||||
@restJson1
|
||||
@sigv4(name: "dontcare")
|
||||
@auth([sigv4])
|
||||
@endpointRuleSet({
|
||||
"version": "1.0",
|
||||
"rules": [{ "type": "endpoint", "conditions": [], "endpoint": { "url": "https://example.com" } }],
|
||||
"parameters": {
|
||||
"Region": { "required": false, "type": "String", "builtIn": "AWS::Region" },
|
||||
"Endpoint": {
|
||||
"builtIn": "SDK::Endpoint",
|
||||
"required": false,
|
||||
"documentation": "Override the endpoint used to send this request",
|
||||
"type": "String"
|
||||
},
|
||||
"UseDualStack": {
|
||||
"builtIn": "AWS::UseDualStack",
|
||||
"required": true,
|
||||
"default": false,
|
||||
"type": "Boolean"
|
||||
},
|
||||
}
|
||||
})
|
||||
"""
|
||||
|
||||
val traitsWithNeither =
|
||||
"""
|
||||
@service(sdkId: "dontcare")
|
||||
@restJson1
|
||||
@sigv4(name: "dontcare")
|
||||
|
@ -45,6 +134,9 @@ class SmokeTestsDecoratorTest {
|
|||
"Region": { "required": false, "type": "String", "builtIn": "AWS::Region" },
|
||||
}
|
||||
})
|
||||
"""
|
||||
|
||||
val serviceDef = """
|
||||
service TestService {
|
||||
version: "2023-01-01",
|
||||
operations: [SomeOperation]
|
||||
|
@ -54,6 +146,7 @@ class SmokeTestsDecoratorTest {
|
|||
{
|
||||
id: "SomeOperationSuccess",
|
||||
params: {}
|
||||
vendorParamsShape: "aws.test#AwsVendorParams",
|
||||
vendorParams: {
|
||||
region: "us-west-2"
|
||||
}
|
||||
|
@ -62,6 +155,7 @@ class SmokeTestsDecoratorTest {
|
|||
{
|
||||
id: "SomeOperationFailure",
|
||||
params: {}
|
||||
vendorParamsShape: "aws.test#AwsVendorParams",
|
||||
vendorParams: {
|
||||
region: "us-west-2"
|
||||
}
|
||||
|
@ -70,6 +164,7 @@ class SmokeTestsDecoratorTest {
|
|||
{
|
||||
id: "SomeOperationFailureExplicitShape",
|
||||
params: {}
|
||||
vendorParamsShape: "aws.test#AwsVendorParams",
|
||||
vendorParams: {
|
||||
region: "us-west-2"
|
||||
}
|
||||
|
@ -94,11 +189,34 @@ class SmokeTestsDecoratorTest {
|
|||
|
||||
@error("server")
|
||||
structure FooException { }
|
||||
""".asSmithyModel(smithyVersion = "2")
|
||||
"""
|
||||
val model = (imports + traitsWithAllBuiltIns + serviceDef).asSmithyModel(smithyVersion = "2")
|
||||
val modelWithNoDualStack = (imports + traitsWithNoDualStack + serviceDef).asSmithyModel(smithyVersion = "2")
|
||||
val modelWithNoFips = (imports + traitsWithNoFips + serviceDef).asSmithyModel(smithyVersion = "2")
|
||||
val modelWithNeitherBuiltIn = (imports + traitsWithNeither + serviceDef).asSmithyModel(smithyVersion = "2")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun smokeTestSdkCodegen() {
|
||||
testSmokeTestsWithModel(model)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun smokeTestSdkCodegenNoDualStack() {
|
||||
testSmokeTestsWithModel(modelWithNoDualStack)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun smokeTestSdkCodegenNoFips() {
|
||||
testSmokeTestsWithModel(modelWithNoFips)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun smokeTestSdkCodegenNeitherBuiltIn() {
|
||||
testSmokeTestsWithModel(modelWithNeitherBuiltIn)
|
||||
}
|
||||
|
||||
fun testSmokeTestsWithModel(model: Model) {
|
||||
val codegenContext = testClientCodegenContext(model)
|
||||
val smokeTestedOperations = operationToTestCases(model)
|
||||
awsSdkIntegrationTest(
|
||||
|
@ -107,9 +225,11 @@ class SmokeTestsDecoratorTest {
|
|||
// `SdkSmokeTestsRustClientCodegenPlugin` only uses the minimal set of codegen decorators, which results
|
||||
// in a significant amount of unused code. This can cause `clippy` to fail with the `--deny warnings`
|
||||
// setting enabled by default in `.crate/config.toml` in test workspaces.
|
||||
// To work around this issue, we unset `RUSTFLAGS` to allow unused and dead code.
|
||||
// To work around this issue, we unset `RUSTFLAGS` to allow unused and dead code. To perform a compilation
|
||||
// only test, we don't need to set `mapOf(Pair("RUSTFLAGS", "--cfg smoketests"))` since that would
|
||||
// cause the tests to actually run (against a non-existent service) and fail.
|
||||
environment = mapOf(Pair("RUSTFLAGS", "")),
|
||||
test = { _, crate ->
|
||||
test = { codegenContext, crate ->
|
||||
// It should compile. We can't run the tests because they don't target a real service.
|
||||
// They are skipped because the `smoketests` flag is unset for `rustc` in the `cargo test`
|
||||
// invocation specified by `awsIntegrationTestParams`.
|
||||
|
@ -123,7 +243,12 @@ class SmokeTestsDecoratorTest {
|
|||
// will suffice for the test.
|
||||
configBuilderInitializer = { ->
|
||||
writable {
|
||||
rust("let conf = config::Builder::new()")
|
||||
rust(
|
||||
"""
|
||||
let conf = config::Builder::new().build();
|
||||
let params = ${codegenContext.moduleUseName()}::config::endpoint::Params::builder()
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue