Skip to content

Commit f212be2

Browse files
committed
Simplified Callback Tests
1 parent 8998719 commit f212be2

3 files changed

Lines changed: 82 additions & 193 deletions

File tree

sdk-integration-tests/src/test/java/com/amazonaws/lambda/durable/CallbackIntegrationTest.java

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,46 @@
55

66
import static org.junit.jupiter.api.Assertions.*;
77

8-
import com.amazonaws.lambda.durable.exception.CallbackFailedException;
9-
import com.amazonaws.lambda.durable.exception.CallbackTimeoutException;
8+
import com.amazonaws.lambda.durable.serde.JacksonSerDes;
9+
import com.amazonaws.lambda.durable.serde.SerDes;
1010
import com.amazonaws.lambda.durable.model.ExecutionStatus;
1111
import com.amazonaws.lambda.durable.testing.LocalDurableTestRunner;
1212
import java.time.Duration;
13+
import java.util.concurrent.atomic.AtomicInteger;
1314
import org.junit.jupiter.api.Test;
1415
import software.amazon.awssdk.services.lambda.model.ErrorObject;
1516
import software.amazon.awssdk.services.lambda.model.OperationStatus;
1617
import software.amazon.awssdk.services.lambda.model.OperationType;
1718

1819
class CallbackIntegrationTest {
1920

21+
/** Custom SerDes that tracks deserialization calls for testing. */
22+
static class TrackingSerDes implements SerDes {
23+
private final JacksonSerDes delegate = new JacksonSerDes();
24+
private final AtomicInteger deserializeCount = new AtomicInteger(0);
25+
26+
@Override
27+
public String serialize(Object value) {
28+
return delegate.serialize(value);
29+
}
30+
31+
@Override
32+
public <T> T deserialize(String data, Class<T> type) {
33+
deserializeCount.incrementAndGet();
34+
return delegate.deserialize(data, type);
35+
}
36+
37+
@Override
38+
public <T> T deserialize(String data, TypeToken<T> typeToken) {
39+
deserializeCount.incrementAndGet();
40+
return delegate.deserialize(data, typeToken);
41+
}
42+
43+
public int getDeserializeCount() {
44+
return deserializeCount.get();
45+
}
46+
}
47+
2048
@Test
2149
void callbackSuccessFlow() {
2250
var runner = LocalDurableTestRunner.create(String.class, (input, ctx) -> {
@@ -146,4 +174,56 @@ void callbackWithSteps() {
146174
assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus());
147175
assertEquals("prepared -> approved -> done", result.getResult(String.class));
148176
}
177+
178+
@Test
179+
void callbackWithCustomSerDes() {
180+
var customSerDes = new TrackingSerDes();
181+
182+
var runner = LocalDurableTestRunner.create(String.class, (input, ctx) -> {
183+
var cb = ctx.createCallback(
184+
"approval",
185+
String.class,
186+
CallbackConfig.builder().serDes(customSerDes).build());
187+
188+
return cb.future().get();
189+
});
190+
191+
// First run - creates callback, suspends
192+
var result = runner.run("test");
193+
194+
// Complete the callback
195+
var callbackId = runner.getCallbackId("approval");
196+
runner.completeCallback(callbackId, "\"approved\"");
197+
198+
// Second run - callback complete, returns result
199+
result = runner.run("test");
200+
201+
assertEquals("approved", result.getResult(String.class));
202+
assertTrue(customSerDes.getDeserializeCount() > 0, "Custom SerDes should have been used");
203+
}
204+
205+
@Test
206+
void callbackWithNullSerDesUsesDefault() {
207+
var runner = LocalDurableTestRunner.create(String.class, (input, ctx) -> {
208+
// Explicitly pass null SerDes - should use default
209+
var cb = ctx.createCallback(
210+
"approval",
211+
String.class,
212+
CallbackConfig.builder().serDes(null).build());
213+
214+
return cb.future().get();
215+
});
216+
217+
// First run - creates callback, suspends
218+
var result = runner.run("test");
219+
220+
// Complete the callback
221+
var callbackId = runner.getCallbackId("approval");
222+
runner.completeCallback(callbackId, "\"result\"");
223+
224+
// Second run - callback complete, returns result
225+
result = runner.run("test");
226+
227+
assertEquals("result", result.getResult(String.class));
228+
}
149229
}

sdk-integration-tests/src/test/java/com/amazonaws/lambda/durable/CustomSerDesCallbackIntegrationTest.java

Lines changed: 0 additions & 174 deletions
This file was deleted.

sdk/src/test/java/com/amazonaws/lambda/durable/CallbackConfigTest.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,4 @@ void testBuilderWithAllOptions() {
5353
assertEquals(heartbeatTimeout, config.heartbeatTimeout());
5454
assertEquals(customSerDes, config.serDes());
5555
}
56-
57-
@Test
58-
void testBuilderChaining() {
59-
var timeout = Duration.ofMinutes(10);
60-
var heartbeatTimeout = Duration.ofMinutes(1);
61-
SerDes customSerDes = new JacksonSerDes();
62-
63-
var config = CallbackConfig.builder()
64-
.timeout(timeout)
65-
.heartbeatTimeout(heartbeatTimeout)
66-
.serDes(customSerDes)
67-
.build();
68-
69-
assertEquals(timeout, config.timeout());
70-
assertEquals(heartbeatTimeout, config.heartbeatTimeout());
71-
assertEquals(customSerDes, config.serDes());
72-
}
7356
}

0 commit comments

Comments
 (0)