-
Notifications
You must be signed in to change notification settings - Fork 124
/
UniOnFailureRetryTest.java
103 lines (84 loc) · 3.2 KB
/
UniOnFailureRetryTest.java
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
package io.smallrye.mutiny.operators;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.jupiter.api.Test;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.helpers.test.UniAssertSubscriber;
public class UniOnFailureRetryTest {
@Test
public void testInvalidNumberOfAttempts() {
assertThrows(IllegalArgumentException.class, () -> Uni.createFrom().nothing().onFailure().retry().atMost(-10));
}
@Test
public void testInvalidNumberOfAttemptsWithZero() {
assertThrows(IllegalArgumentException.class, () -> Uni.createFrom().nothing().onFailure().retry().atMost(0));
}
@Test
public void testNoRetryOnItem() {
UniAssertSubscriber<Integer> subscriber = UniAssertSubscriber.create();
Uni.createFrom().item(1)
.onFailure().retry().atMost(1)
.subscribe().withSubscriber(subscriber);
subscriber.assertItem(1);
}
@Test
public void testWithOneRetry() {
UniAssertSubscriber<Integer> subscriber = UniAssertSubscriber.create();
AtomicInteger count = new AtomicInteger();
Uni.createFrom().item(() -> {
int i = count.getAndIncrement();
if (i < 1) {
throw new RuntimeException("boom");
}
return i;
})
.onFailure().retry().atMost(1)
.subscribe().withSubscriber(subscriber);
subscriber
.assertCompleted()
.assertItem(1);
}
@Test
public void testWithInfiniteRetry() {
UniAssertSubscriber<Integer> subscriber = UniAssertSubscriber.create();
AtomicInteger count = new AtomicInteger();
Uni.createFrom().item(() -> {
int i = count.getAndIncrement();
if (i < 10) {
throw new RuntimeException("boom");
}
return i;
})
.onFailure().retry().indefinitely()
.subscribe().withSubscriber(subscriber);
subscriber
.assertCompleted()
.assertItem(10);
}
@Test
public void testWithMapperFailure() {
AtomicInteger count = new AtomicInteger();
Uni.createFrom().item(1)
.onItem().invoke(input -> {
if (count.incrementAndGet() < 2) {
throw new RuntimeException("boom");
}
})
.onFailure().retry().atMost(2)
.subscribe().withSubscriber(UniAssertSubscriber.create())
.assertItem(1);
}
@Test
public void testThatNumberOfRetryIfCorrect() {
AtomicInteger calls = new AtomicInteger();
UniAssertSubscriber<Integer> subscriber = Uni.createFrom().<Integer> item(() -> {
calls.incrementAndGet();
throw new RuntimeException("boom");
})
.onFailure().retry().atMost(3)
.subscribe().withSubscriber(UniAssertSubscriber.create());
subscriber.awaitFailure();
assertThat(calls).hasValue(4); // initial subscription + 3 retries
}
}