Skip to content

Commit 4364729

Browse files
committed
feat: all of
1 parent c14acc5 commit 4364729

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.amazonaws.lambda.durable;
4+
5+
import static org.junit.jupiter.api.Assertions.*;
6+
import static org.mockito.Mockito.*;
7+
8+
import com.amazonaws.lambda.durable.operation.DurableOperation;
9+
import java.util.List;
10+
import org.junit.jupiter.api.Test;
11+
12+
class DurableFutureTest {
13+
14+
@Test
15+
void allOfVarargsReturnsResultsInOrder() {
16+
var op1 = mockOperation("first");
17+
var op2 = mockOperation("second");
18+
var op3 = mockOperation("third");
19+
20+
var future1 = new DurableFuture<>(op1);
21+
var future2 = new DurableFuture<>(op2);
22+
var future3 = new DurableFuture<>(op3);
23+
24+
var results = DurableFuture.allOf(future1, future2, future3);
25+
26+
assertEquals(List.of("first", "second", "third"), results);
27+
verify(op1).get();
28+
verify(op2).get();
29+
verify(op3).get();
30+
}
31+
32+
@Test
33+
void allOfListReturnsResultsInOrder() {
34+
var op1 = mockOperation(1);
35+
var op2 = mockOperation(2);
36+
var op3 = mockOperation(3);
37+
38+
var futures = List.of(new DurableFuture<>(op1), new DurableFuture<>(op2), new DurableFuture<>(op3));
39+
40+
var results = DurableFuture.allOf(futures);
41+
42+
assertEquals(List.of(1, 2, 3), results);
43+
}
44+
45+
@Test
46+
void allOfVarargsEmptyReturnsEmptyList() {
47+
var results = DurableFuture.<String>allOf();
48+
49+
assertTrue(results.isEmpty());
50+
}
51+
52+
@Test
53+
void allOfListEmptyReturnsEmptyList() {
54+
var results = DurableFuture.allOf(List.<DurableFuture<String>>of());
55+
56+
assertTrue(results.isEmpty());
57+
}
58+
59+
@Test
60+
void allOfSingleFutureReturnsSingleResult() {
61+
var op = mockOperation("only");
62+
var future = new DurableFuture<>(op);
63+
64+
var results = DurableFuture.allOf(future);
65+
66+
assertEquals(List.of("only"), results);
67+
}
68+
69+
@Test
70+
void allOfPropagatesException() {
71+
var op1 = mockOperation("first");
72+
@SuppressWarnings("unchecked")
73+
DurableOperation<String> op2 = mock(DurableOperation.class);
74+
when(op2.get()).thenThrow(new RuntimeException("Step failed"));
75+
76+
var future1 = new DurableFuture<>(op1);
77+
var future2 = new DurableFuture<>(op2);
78+
79+
assertThrows(RuntimeException.class, () -> DurableFuture.allOf(future1, future2));
80+
}
81+
82+
@SuppressWarnings("unchecked")
83+
private <T> DurableOperation<T> mockOperation(T result) {
84+
DurableOperation<T> op = mock(DurableOperation.class);
85+
when(op.get()).thenReturn(result);
86+
return op;
87+
}
88+
}

0 commit comments

Comments
 (0)