generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathDurableExecutionWrapperTest.java
More file actions
132 lines (108 loc) · 5.06 KB
/
DurableExecutionWrapperTest.java
File metadata and controls
132 lines (108 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package software.amazon.lambda.durable;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static software.amazon.lambda.durable.TypeToken.get;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.List;
import org.junit.jupiter.api.Test;
import software.amazon.awssdk.services.lambda.model.CheckpointUpdatedExecutionState;
import software.amazon.awssdk.services.lambda.model.ExecutionDetails;
import software.amazon.awssdk.services.lambda.model.Operation;
import software.amazon.awssdk.services.lambda.model.OperationStatus;
import software.amazon.awssdk.services.lambda.model.OperationType;
import software.amazon.lambda.durable.client.DurableExecutionClient;
import software.amazon.lambda.durable.execution.DurableExecutor;
import software.amazon.lambda.durable.model.DurableExecutionInput;
import software.amazon.lambda.durable.model.DurableExecutionOutput;
import software.amazon.lambda.durable.model.ExecutionStatus;
import software.amazon.lambda.durable.serde.JacksonSerDes;
class DurableExecutionWrapperTest {
private static final String EXECUTION_OP_ID = "f3d7b0c0-1234-5678-90ab-cdef12345678";
private static final String EXECUTION_NAME = "exec-name";
private static final String EXECUTION_ARN = "arn:aws:lambda:us-east-1:123456789012:function:test/durable-execution/"
+ EXECUTION_NAME + "/" + EXECUTION_OP_ID;
static class TestInput {
public String value;
public TestInput() {}
public TestInput(String value) {
this.value = value;
}
}
static class TestOutput {
public String result;
public TestOutput() {}
public TestOutput(String result) {
this.result = result;
}
}
private DurableExecutionClient mockClient() {
return TestUtils.createMockClient();
}
@Test
void testWrapperPattern() {
var config =
DurableConfig.builder().withDurableExecutionClient(mockClient()).build();
RequestHandler<DurableExecutionInput, DurableExecutionOutput> handler = DurableExecutor.wrap(
get(TestInput.class),
(input, context) -> {
var result = context.step("process", String.class, stepCtx -> "Wrapped: " + input.value);
return new TestOutput(result);
},
config);
var serDes = new JacksonSerDes();
// Create input with EXECUTION operation
var executionOp = Operation.builder()
.id(EXECUTION_OP_ID)
.type(OperationType.EXECUTION)
.status(OperationStatus.STARTED)
.executionDetails(ExecutionDetails.builder()
.inputPayload(serDes.serialize(new TestInput("test")))
.build())
.build();
var input = new DurableExecutionInput(
EXECUTION_ARN,
"token-1",
CheckpointUpdatedExecutionState.builder()
.operations(List.of(executionOp))
.build());
// Execute
var output = handler.handleRequest(input, null);
// Verify
assertEquals(ExecutionStatus.SUCCEEDED, output.status());
assertNotNull(output.result());
var result = serDes.deserialize(output.result(), get(TestOutput.class));
assertEquals("Wrapped: test", result.result);
}
@Test
void testWrapperWithMethodReference() {
var config =
DurableConfig.builder().withDurableExecutionClient(mockClient()).build();
RequestHandler<DurableExecutionInput, DurableExecutionOutput> handler =
DurableExecutor.wrap(get(TestInput.class), DurableExecutionWrapperTest::handleRequest, config);
var serDes = new JacksonSerDes();
var executionOp = Operation.builder()
.id(EXECUTION_OP_ID)
.type(OperationType.EXECUTION)
.status(OperationStatus.STARTED)
.executionDetails(ExecutionDetails.builder()
.inputPayload(serDes.serialize(new TestInput("method-ref")))
.build())
.build();
var input = new DurableExecutionInput(
EXECUTION_ARN,
"token-1",
CheckpointUpdatedExecutionState.builder()
.operations(List.of(executionOp))
.build());
var output = handler.handleRequest(input, null);
assertEquals(ExecutionStatus.SUCCEEDED, output.status());
var result = serDes.deserialize(output.result(), get(TestOutput.class));
assertEquals("Method: method-ref", result.result);
}
private static TestOutput handleRequest(TestInput input, DurableContext context) {
var result = context.step("process", String.class, stepCtx -> "Method: " + input.value);
return new TestOutput(result);
}
}