@@ -40,7 +40,7 @@ public void normal() throws Throwable {
4040
4141 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
4242
43- awaitStreamers (dsp , 1000 );
43+ assertHasStreamers (dsp , 1000 );
4444
4545 for (int i = 1 ; i < 6 ; i ++) {
4646 dsp .next (i ).toCompletableFuture ().join ();
@@ -50,7 +50,7 @@ public void normal() throws Throwable {
5050 ts .awaitDone (5 , TimeUnit .SECONDS )
5151 .assertResult (1 , 2 , 3 , 4 , 5 );
5252
53- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
53+ assertNoStreamers (dsp , 1000 );
5454 assertTrue (dsp .hasComplete (), "dsp has completed?" );
5555 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
5656 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -69,7 +69,7 @@ public void endsInError() throws Throwable {
6969
7070 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
7171
72- awaitStreamers (dsp , 1000 );
72+ assertHasStreamers (dsp , 1000 );
7373
7474 for (int i = 1 ; i < 6 ; i ++) {
7575 dsp .next (i ).toCompletableFuture ().join ();
@@ -80,7 +80,7 @@ public void endsInError() throws Throwable {
8080 ts .awaitDone (5 , TimeUnit .SECONDS )
8181 .assertFailure (TestException .class , 1 , 2 , 3 , 4 , 5 );
8282
83- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
83+ assertNoStreamers (dsp , 1000 );
8484 assertFalse (dsp .hasComplete (), "dsp has completed?" );
8585 assertTrue (dsp .hasThrowable (), "dsp has no throwable?" );
8686 assertSame (te , dsp .getThrowable (), "dsp has the wrong throwable?" );
@@ -100,9 +100,7 @@ public void normalDebug() throws Throwable {
100100
101101 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
102102
103- awaitStreamers (dsp , 1000 );
104-
105- assertTrue (dsp .hasStreamers (), "dsp has no streamers?" );
103+ assertHasStreamers (dsp , 1000 );
106104
107105 for (int i = 1 ; i < 6 ; i ++) {
108106 dsp .next (i ).toCompletableFuture ().join ();
@@ -112,7 +110,7 @@ public void normalDebug() throws Throwable {
112110 ts .awaitDone (5 , TimeUnit .SECONDS )
113111 .assertResult (1 , 2 , 3 , 4 , 5 );
114112
115- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
113+ assertNoStreamers (dsp , 1000 );
116114 assertTrue (dsp .hasComplete (), "dsp has completed?" );
117115 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
118116 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -178,16 +176,14 @@ public void normalTake3AltDebug() throws Throwable {
178176
179177 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
180178
181- awaitStreamers (dsp , 1000 );
179+ assertHasStreamers (dsp , 1000 );
182180
183181 for (int i = 1 ; i < 4 ; i ++) {
184182 IO .println (i + " -> next" );
185183 dsp .next (i ).toCompletableFuture ().join ();
186184 }
187185
188- awaitNoStreamers (dsp , 1000 );
189-
190- assertFalse (dsp .hasStreamers (), "dsp has streamers?" );
186+ assertNoStreamers (dsp , 1000 );
191187
192188 for (int i = 4 ; i < 6 ; i ++) {
193189 IO .println (i + " -> next" );
@@ -201,7 +197,7 @@ public void normalTake3AltDebug() throws Throwable {
201197 ts .awaitDone (5 , TimeUnit .SECONDS )
202198 .assertResult (1 , 2 , 3 );
203199
204- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
200+ assertNoStreamers (dsp , 1000 );
205201 assertTrue (dsp .hasComplete (), "dsp has completed?" );
206202 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
207203 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -222,7 +218,7 @@ public void normalTake3Debug() throws Throwable {
222218
223219 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
224220
225- awaitStreamers (dsp , 1000 );
221+ assertHasStreamers (dsp , 1000 );
226222
227223 for (int i = 1 ; i < 6 ; i ++) {
228224 dsp .next (i ).toCompletableFuture ().join ();
@@ -235,7 +231,7 @@ public void normalTake3Debug() throws Throwable {
235231 ts .awaitDone (5 , TimeUnit .SECONDS )
236232 .assertResult (1 , 2 , 3 );
237233
238- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
234+ assertNoStreamers (dsp , 1000 );
239235 assertTrue (dsp .hasComplete (), "dsp has completed?" );
240236 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
241237 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -257,7 +253,7 @@ public void normalMulti() throws Throwable {
257253 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
258254 ts2 .awaitOnSubscribe (1 , TimeUnit .SECONDS );
259255
260- awaitStreamers (dsp , 1000 , 2 );
256+ assertHasStreamers (dsp , 1000 , 2 );
261257
262258 for (int i = 1 ; i < 6 ; i ++) {
263259 dsp .next (i ).toCompletableFuture ().join ();
@@ -270,7 +266,7 @@ public void normalMulti() throws Throwable {
270266 ts2 .awaitDone (5 , TimeUnit .SECONDS )
271267 .assertResult (1 , 2 , 3 , 4 , 5 );
272268
273- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
269+ assertNoStreamers (dsp , 1000 );
274270 assertTrue (dsp .hasComplete (), "dsp has completed?" );
275271 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
276272 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -291,7 +287,7 @@ public void normalMultiOtherCancels() throws Throwable {
291287 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
292288 ts2 .awaitOnSubscribe (1 , TimeUnit .SECONDS );
293289
294- awaitStreamers (dsp , 1000 , 2 );
290+ assertHasStreamers (dsp , 1000 , 2 );
295291
296292 ts2 .cancel ();
297293
@@ -305,7 +301,7 @@ public void normalMultiOtherCancels() throws Throwable {
305301
306302 ts2 .assertEmpty ();
307303
308- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
304+ assertNoStreamers (dsp , 1000 );
309305 assertTrue (dsp .hasComplete (), "dsp has completed?" );
310306 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
311307 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -326,7 +322,7 @@ public void normalMultiFirstCancels() throws Throwable {
326322 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
327323 ts2 .awaitOnSubscribe (1 , TimeUnit .SECONDS );
328324
329- awaitStreamers (dsp , 1000 , 2 );
325+ assertHasStreamers (dsp , 1000 , 2 );
330326
331327 ts .cancel ();
332328
@@ -340,7 +336,7 @@ public void normalMultiFirstCancels() throws Throwable {
340336
341337 ts .assertEmpty ();
342338
343- assertFalse (dsp . hasStreamers (), "dsp has streamers?" );
339+ assertNoStreamers (dsp , 1000 );
344340 assertTrue (dsp .hasComplete (), "dsp has completed?" );
345341 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
346342 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -367,14 +363,14 @@ public void raceToStream() throws Throwable {
367363 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
368364 ts2 .awaitOnSubscribe (1 , TimeUnit .SECONDS );
369365
370- awaitStreamers (dsp , 1000 );
366+ // Both subscribers must be fully attached before cancellation,
367+ // otherwise a late stream() can re-add a streamer after the wait.
368+ assertHasStreamers (dsp , 1000 , 2 );
371369
372370 ts .cancel ();
373371 ts2 .cancel ();
374372
375- awaitNoStreamers (dsp , 1000 );
376-
377- assertFalse (dsp .hasStreamers (), "dsp has streamers?" );
373+ assertNoStreamers (dsp , 1000 );
378374 assertFalse (dsp .hasComplete (), "dsp has completed?" );
379375 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
380376 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
@@ -394,13 +390,11 @@ public void comeAndGo() throws Throwable {
394390
395391 ts .awaitOnSubscribe (1 , TimeUnit .SECONDS );
396392
397- awaitStreamers (dsp , 1000 );
393+ assertHasStreamers (dsp , 1000 );
398394
399395 ts .cancel ();
400396
401- awaitNoStreamers (dsp , 1000 );
402-
403- assertFalse (dsp .hasStreamers (), "dsp has streamers?" );
397+ assertNoStreamers (dsp , 1000 );
404398 assertFalse (dsp .hasComplete (), "dsp has completed?" );
405399 assertFalse (dsp .hasThrowable (), "dsp has throwable?" );
406400 assertNull (dsp .getThrowable (), "dsp has a non-null throwable?" );
0 commit comments