4646import java .util .concurrent .atomic .AtomicInteger ;
4747import java .util .concurrent .atomic .AtomicLong ;
4848import java .util .function .BiFunction ;
49+ import java .util .function .Predicate ;
4950import java .util .function .Supplier ;
5051import java .util .logging .Level ;
5152import java .util .stream .Collectors ;
@@ -247,7 +248,7 @@ default void requestChannel1() {
247248 .requestChannel (Mono .just (createTestPayload (0 )))
248249 .doOnNext (Payload ::release )
249250 .as (StepVerifier ::create )
250- .expectNextCount ( 1 )
251+ .thenConsumeWhile ( new PayloadPredicate ( 1 ) )
251252 .expectComplete ()
252253 .verify (getTimeout ());
253254 }
@@ -262,7 +263,7 @@ default void requestChannel200_000() {
262263 .doOnNext (Payload ::release )
263264 .limitRate (8 )
264265 .as (StepVerifier ::create )
265- .expectNextCount ( 200_000 )
266+ .thenConsumeWhile ( new PayloadPredicate ( 200_000 ) )
266267 .expectComplete ()
267268 .verify (getTimeout ());
268269 }
@@ -276,7 +277,7 @@ default void largePayloadRequestChannel50() {
276277 .requestChannel (payloads )
277278 .doOnNext (Payload ::release )
278279 .as (StepVerifier ::create )
279- .expectNextCount ( 50 )
280+ .thenConsumeWhile ( new PayloadPredicate ( 50 ) )
280281 .expectComplete ()
281282 .verify (getTimeout ());
282283 }
@@ -291,7 +292,7 @@ default void requestChannel20_000() {
291292 .doOnNext (this ::assertChannelPayload )
292293 .doOnNext (Payload ::release )
293294 .as (StepVerifier ::create )
294- .expectNextCount ( 20_000 )
295+ .thenConsumeWhile ( new PayloadPredicate ( 20_000 ) )
295296 .expectComplete ()
296297 .verify (getTimeout ());
297298 }
@@ -306,7 +307,7 @@ default void requestChannel2_000_000() {
306307 .doOnNext (Payload ::release )
307308 .limitRate (8 )
308309 .as (StepVerifier ::create )
309- .expectNextCount ( 2_000_000 )
310+ .thenConsumeWhile ( new PayloadPredicate ( 2_000_000 ) )
310311 .expectComplete ()
311312 .verify (getTimeout ());
312313 }
@@ -322,7 +323,7 @@ default void requestChannel3() {
322323 .requestChannel (payloads )
323324 .doOnNext (Payload ::release )
324325 .as (publisher -> StepVerifier .create (publisher , 3 ))
325- .expectNextCount ( 3 )
326+ .thenConsumeWhile ( new PayloadPredicate ( 3 ) )
326327 .expectComplete ()
327328 .verify (getTimeout ());
328329
@@ -358,7 +359,7 @@ default void check(Flux<Payload> payloads) {
358359 .doOnNext (ReferenceCounted ::release )
359360 .limitRate (8 )
360361 .as (StepVerifier ::create )
361- .expectNextCount ( 256 )
362+ .thenConsumeWhile ( new PayloadPredicate ( 256 ) )
362363 .as ("expected 256 items" )
363364 .expectComplete ()
364365 .verify (getTimeout ());
@@ -958,4 +959,27 @@ public String toString() {
958959 }
959960 }
960961 }
962+
963+ class PayloadPredicate implements Predicate <Payload > {
964+ final int expectedCnt ;
965+ int cnt ;
966+
967+ public PayloadPredicate (int expectedCnt ) {
968+ this .expectedCnt = expectedCnt ;
969+ }
970+
971+ @ Override
972+ public boolean test (Payload p ) {
973+ boolean shouldConsume = cnt ++ < expectedCnt ;
974+ if (!shouldConsume ) {
975+ logger .info (
976+ "Metadata: \n \r {}\n \r Data:{}" ,
977+ p .hasMetadata ()
978+ ? new ByteBufRepresentation ().fallbackToStringOf (p .sliceMetadata ())
979+ : "Empty" ,
980+ new ByteBufRepresentation ().fallbackToStringOf (p .sliceData ()));
981+ }
982+ return shouldConsume ;
983+ }
984+ }
961985}
0 commit comments