diff --git a/conformance-tests/src/main/java/general/ReplayOperationIdentity.java b/conformance-tests/src/main/java/general/ReplayOperationIdentity.java new file mode 100644 index 000000000..97eeb8107 --- /dev/null +++ b/conformance-tests/src/main/java/general/ReplayOperationIdentity.java @@ -0,0 +1,34 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package general; + +import java.time.Duration; +import software.amazon.lambda.durable.DurableConfig; +import software.amazon.lambda.durable.DurableContext; +import software.amazon.lambda.durable.DurableHandler; +import software.amazon.lambda.durable.logging.LoggerConfig; + +/** 11-1: Replay rejects an operation-type mismatch. */ +public class ReplayOperationIdentity extends DurableHandler { + + @Override + protected DurableConfig createConfiguration() { + return DurableConfig.builder() + .withLoggerConfig(LoggerConfig.withReplayLogging()) + .build(); + } + + @Override + public String handleRequest(Object input, DurableContext context) { + if (context.isReplaying()) { + context.getLogger().info("DETERMINISM_REPLAY_CANARY"); + return context.step("identity-slot", String.class, stepContext -> { + stepContext.getLogger().info("DETERMINISM_STEP_BODY_EXECUTED"); + return "unexpected"; + }); + } + + context.wait("identity-slot", Duration.ofSeconds(1)); + return null; + } +} diff --git a/conformance-tests/template_general.yaml b/conformance-tests/template_general.yaml new file mode 100644 index 000000000..8450ad045 --- /dev/null +++ b/conformance-tests/template_general.yaml @@ -0,0 +1,67 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: Durable Execution Conformance Test Examples - Java (General) + +Parameters: + Architecture: + Type: String + Default: arm64 + Description: Lambda Function Architecture + AllowedValues: + - x86_64 + - arm64 + JavaVersion: + Type: String + Default: 'java21' + Description: Java runtime version + +Globals: + Function: + Timeout: 60 + MemorySize: 512 + Runtime: + Ref: JavaVersion + Architectures: + - Ref: Architecture + LoggingConfig: + LogFormat: JSON + +Resources: + DurableFunctionRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: lambda.amazonaws.com + Action: sts:AssumeRole + ManagedPolicyArns: + - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole + Policies: + - PolicyName: DurableExecutionPolicy + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - lambda:CheckpointDurableExecution + - lambda:GetDurableExecutionState + Resource: '*' + + ReplayOperationIdentity: + Type: AWS::Serverless::Function + TestingMetadata: + TestDescription: ["11-1"] + Properties: + CodeUri: . + Handler: general.ReplayOperationIdentity + Description: Replay rejects an operation-type mismatch + Role: + Fn::GetAtt: + - DurableFunctionRole + - Arn + DurableConfig: + RetentionPeriodInDays: 7 + ExecutionTimeout: 300