|
5 | 5 | import static org.junit.jupiter.api.Assertions.*; |
6 | 6 | import static software.amazon.lambda.durable.TypeToken.get; |
7 | 7 |
|
| 8 | +import java.time.Duration; |
8 | 9 | import java.util.HashMap; |
9 | 10 | import java.util.List; |
10 | 11 | import java.util.Map; |
|
25 | 26 | import software.amazon.lambda.durable.examples.step.ManyAsyncStepsExample; |
26 | 27 | import software.amazon.lambda.durable.examples.types.ApprovalRequest; |
27 | 28 | import software.amazon.lambda.durable.examples.types.GreetingRequest; |
| 29 | +import software.amazon.lambda.durable.examples.wait.ConcurrentWaitForConditionExample; |
28 | 30 | import software.amazon.lambda.durable.model.ExecutionStatus; |
29 | 31 | import software.amazon.lambda.durable.testing.CloudDurableTestRunner; |
30 | 32 |
|
@@ -594,4 +596,41 @@ void testComplexMapExample() { |
594 | 596 | assertTrue(output.contains("healthy")); |
595 | 597 | assertTrue(output.contains("reason=MIN_SUCCESSFUL_REACHED")); |
596 | 598 | } |
| 599 | + |
| 600 | + @Test |
| 601 | + void testWaitForConditionExample() { |
| 602 | + var runner = CloudDurableTestRunner.create( |
| 603 | + arn("wait-for-condition-example"), Integer.class, Integer.class, lambdaClient); |
| 604 | + var result = runner.run(3); |
| 605 | + |
| 606 | + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); |
| 607 | + assertEquals(3, result.getResult(Integer.class)); |
| 608 | + } |
| 609 | + |
| 610 | + @Test |
| 611 | + void testConcurrentWaitForConditionExample() { |
| 612 | + var runner = CloudDurableTestRunner.create( |
| 613 | + arn("concurrent-wait-for-condition-example"), |
| 614 | + ConcurrentWaitForConditionExample.Input.class, |
| 615 | + String.class, |
| 616 | + lambdaClient); |
| 617 | + var result = runner.run(new ConcurrentWaitForConditionExample.Input(3, 100, 50)); |
| 618 | + |
| 619 | + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); |
| 620 | + |
| 621 | + // Verify each operation finished with 3 attempts |
| 622 | + var allOperationsOutput = result.getResult(String.class); |
| 623 | + var operationOutputs = allOperationsOutput.split(" \\| "); |
| 624 | + assertEquals(100, operationOutputs.length); |
| 625 | + for (var operationOutput : operationOutputs) { |
| 626 | + assertEquals("3", operationOutput); |
| 627 | + } |
| 628 | + |
| 629 | + // Verify each operation completes in under 30 seconds (extra time for flakiness) |
| 630 | + for (var operationResult : result.getOperations()) { |
| 631 | + assertTrue( |
| 632 | + operationResult.getDuration().compareTo(Duration.ofSeconds(30)) < 0, |
| 633 | + "Operation took " + operationResult.getDuration().toSeconds() + "s, expected < 30s"); |
| 634 | + } |
| 635 | + } |
597 | 636 | } |
0 commit comments