From f7ba6ef82f3954faa3c48f066b19e111a20e7036 Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 22 Jul 2026 23:37:40 +0000 Subject: [PATCH] test: add wait-strategy cases (6-5, 6-6) Adds the 6-5 fixed-delay and 6-6 max-attempts-exceeded wait_for_condition cases, completing the suite (6-1..6-13). Both use the SDK's built-in create_wait_strategy and are KNOWN to fail on the current Python SDK: the first continue checkpoint is recorded as StepFailed instead of StepSucceeded, failing the execution immediately (one shared root cause). The red conformance (wait_for_condition) job is the intended divergence signal, to be resolved by an SDK fix. --- .../wait_for_condition_fixed_delay.py | 34 +++++++++++++++++++ .../wait_for_condition_max_attempts.py | 33 ++++++++++++++++++ .../template_wait_for_condition.yaml | 30 ++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_fixed_delay.py create mode 100644 packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_max_attempts.py diff --git a/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_fixed_delay.py b/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_fixed_delay.py new file mode 100644 index 00000000..d0100cd9 --- /dev/null +++ b/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_fixed_delay.py @@ -0,0 +1,34 @@ +"""6-5: Wait-for-condition fixed-delay wait strategy.""" + +from typing import Any + +from aws_durable_execution_sdk_python.config import Duration, JitterStrategy +from aws_durable_execution_sdk_python.context import DurableContext +from aws_durable_execution_sdk_python.execution import durable_execution +from aws_durable_execution_sdk_python.types import WaitForConditionCheckContext +from aws_durable_execution_sdk_python.waits import ( + WaitForConditionConfig, + WaitStrategyConfig, + create_wait_strategy, +) + + +@durable_execution +def handler(event: Any, context: DurableContext) -> int: + threshold = int(event) + + def check(state: int, _ctx: WaitForConditionCheckContext) -> int: + return state + 1 + + config = WaitForConditionConfig( + wait_strategy=create_wait_strategy( + WaitStrategyConfig( + should_continue_polling=lambda s: s < threshold, + initial_delay=Duration.from_seconds(2), + backoff_rate=1, + jitter_strategy=JitterStrategy.NONE, + ) + ), + initial_state=0, + ) + return context.wait_for_condition(check=check, config=config) diff --git a/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_max_attempts.py b/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_max_attempts.py new file mode 100644 index 00000000..35b01a4e --- /dev/null +++ b/packages/aws-durable-execution-sdk-python-conformance-tests/handlers/wait_for_condition/wait_for_condition_max_attempts.py @@ -0,0 +1,33 @@ +"""6-6: Wait-for-condition max attempts exceeded (failure).""" + +from typing import Any + +from aws_durable_execution_sdk_python.config import Duration, JitterStrategy +from aws_durable_execution_sdk_python.context import DurableContext +from aws_durable_execution_sdk_python.execution import durable_execution +from aws_durable_execution_sdk_python.types import WaitForConditionCheckContext +from aws_durable_execution_sdk_python.waits import ( + WaitForConditionConfig, + WaitStrategyConfig, + create_wait_strategy, +) + + +@durable_execution +def handler(_event: Any, context: DurableContext) -> int: + def check(state: int, _ctx: WaitForConditionCheckContext) -> int: + return state + 1 + + config = WaitForConditionConfig( + wait_strategy=create_wait_strategy( + WaitStrategyConfig( + should_continue_polling=lambda _s: True, + max_attempts=3, + initial_delay=Duration.from_seconds(1), + backoff_rate=1, + jitter_strategy=JitterStrategy.NONE, + ) + ), + initial_state=0, + ) + return context.wait_for_condition(check=check, config=config) diff --git a/packages/aws-durable-execution-sdk-python-conformance-tests/template_wait_for_condition.yaml b/packages/aws-durable-execution-sdk-python-conformance-tests/template_wait_for_condition.yaml index 93119560..59a13c29 100644 --- a/packages/aws-durable-execution-sdk-python-conformance-tests/template_wait_for_condition.yaml +++ b/packages/aws-durable-execution-sdk-python-conformance-tests/template_wait_for_condition.yaml @@ -88,6 +88,36 @@ Resources: DurableConfig: RetentionPeriodInDays: 7 ExecutionTimeout: 300 + WaitForConditionFixedDelay: + Type: AWS::Serverless::Function + TestingMetadata: + TestDescription: ["6-5"] + Properties: + CodeUri: lambda-build/ + Handler: wait_for_condition.wait_for_condition_fixed_delay.handler + Description: Wait-for-condition with fixed-delay wait strategy + Role: + Fn::GetAtt: + - DurableFunctionRole + - Arn + DurableConfig: + RetentionPeriodInDays: 7 + ExecutionTimeout: 300 + WaitForConditionMaxAttempts: + Type: AWS::Serverless::Function + TestingMetadata: + TestDescription: ["6-6"] + Properties: + CodeUri: lambda-build/ + Handler: wait_for_condition.wait_for_condition_max_attempts.handler + Description: Wait-for-condition max attempts exceeded (failure) + Role: + Fn::GetAtt: + - DurableFunctionRole + - Arn + DurableConfig: + RetentionPeriodInDays: 7 + ExecutionTimeout: 300 WaitForConditionCheckThrows: Type: AWS::Serverless::Function TestingMetadata: