10
10
import java .util .Arrays ;
11
11
import java .util .Collections ;
12
12
import java .util .List ;
13
+ import java .util .concurrent .CountDownLatch ;
14
+ import java .util .concurrent .TimeUnit ;
13
15
import java .util .concurrent .atomic .AtomicInteger ;
14
16
import org .assertj .core .api .Assertions ;
17
+ import org .junit .jupiter .api .BeforeEach ;
15
18
import org .junit .jupiter .api .Test ;
16
19
import org .mockito .Mockito ;
17
20
import org .reactivestreams .Publisher ;
26
29
27
30
public class LoadbalanceTest {
28
31
29
- @ Test
30
- public void shouldDeliverAllTheRequestsWithRoundRobinStrategy () {
32
+ @ BeforeEach
33
+ void setUp () {
31
34
Hooks .onErrorDropped ((__ ) -> {});
35
+ }
32
36
37
+ @ Test
38
+ public void shouldDeliverAllTheRequestsWithRoundRobinStrategy () throws Exception {
33
39
final AtomicInteger counter = new AtomicInteger ();
34
40
final ClientTransport mockTransport = Mockito .mock (ClientTransport .class );
35
41
final RSocketConnector rSocketConnectorMock = Mockito .mock (RSocketConnector .class );
@@ -51,12 +57,14 @@ public Mono<Void> fireAndForget(Payload payload) {
51
57
final TestPublisher <List <LoadbalanceTarget >> source = TestPublisher .create ();
52
58
final RSocketPool rSocketPool =
53
59
new RSocketPool (rSocketConnectorMock , source , new RoundRobinLoadbalanceStrategy ());
60
+ final CountDownLatch requestLatch = new CountDownLatch (1000 );
54
61
55
62
RaceTestUtils .race (
56
63
() -> {
57
64
for (int j = 0 ; j < 1000 ; j ++) {
58
65
Mono .defer (() -> rSocketPool .select ().fireAndForget (EmptyPayload .INSTANCE ))
59
66
.retry ()
67
+ .doFinally (s -> requestLatch .countDown ())
60
68
.subscribe ();
61
69
}
62
70
},
@@ -75,16 +83,15 @@ public Mono<Void> fireAndForget(Payload payload) {
75
83
}
76
84
});
77
85
86
+ requestLatch .await (5 , TimeUnit .SECONDS );
78
87
Assertions .assertThat (counter .get ()).isEqualTo (1000 );
79
88
80
89
counter .set (0 );
81
90
}
82
91
}
83
92
84
93
@ Test
85
- public void shouldDeliverAllTheRequestsWithWightedStrategy () {
86
- Hooks .onErrorDropped ((__ ) -> {});
87
-
94
+ public void shouldDeliverAllTheRequestsWithWeightedStrategy () throws InterruptedException {
88
95
final AtomicInteger counter = new AtomicInteger ();
89
96
final ClientTransport mockTransport = Mockito .mock (ClientTransport .class );
90
97
final RSocketConnector rSocketConnectorMock = Mockito .mock (RSocketConnector .class );
@@ -101,13 +108,15 @@ public void shouldDeliverAllTheRequestsWithWightedStrategy() {
101
108
WeightedLoadbalanceStrategy .builder ()
102
109
.weightedStatsResolver (r -> (WeightedStats ) r )
103
110
.build ());
111
+ final CountDownLatch requestLatch = new CountDownLatch (1000 );
104
112
105
113
RaceTestUtils .race (
106
114
() -> {
107
115
for (int j = 0 ; j < 1000 ; j ++) {
108
116
Mono .defer (() -> rSocketPool .select ().fireAndForget (EmptyPayload .INSTANCE ))
109
117
.retry ()
110
- .subscribe ();
118
+ .doFinally (s -> requestLatch .countDown ())
119
+ .subscribe (aVoid -> {}, Throwable ::printStackTrace );
111
120
}
112
121
},
113
122
() -> {
@@ -125,6 +134,7 @@ public void shouldDeliverAllTheRequestsWithWightedStrategy() {
125
134
}
126
135
});
127
136
137
+ requestLatch .await (5 , TimeUnit .SECONDS );
128
138
Assertions .assertThat (counter .get ()).isEqualTo (1000 );
129
139
130
140
counter .set (0 );
@@ -133,8 +143,6 @@ public void shouldDeliverAllTheRequestsWithWightedStrategy() {
133
143
134
144
@ Test
135
145
public void ensureRSocketIsCleanedFromThePoolIfSourceRSocketIsDisposed () {
136
- Hooks .onErrorDropped ((__ ) -> {});
137
-
138
146
final AtomicInteger counter = new AtomicInteger ();
139
147
final ClientTransport mockTransport = Mockito .mock (ClientTransport .class );
140
148
final RSocketConnector rSocketConnectorMock = Mockito .mock (RSocketConnector .class );
@@ -179,8 +187,6 @@ public Mono<Void> fireAndForget(Payload payload) {
179
187
180
188
@ Test
181
189
public void ensureContextIsPropagatedCorrectlyForRequestChannel () {
182
- Hooks .onErrorDropped ((__ ) -> {});
183
-
184
190
final AtomicInteger counter = new AtomicInteger ();
185
191
final ClientTransport mockTransport = Mockito .mock (ClientTransport .class );
186
192
final RSocketConnector rSocketConnectorMock = Mockito .mock (RSocketConnector .class );
0 commit comments