@Test public void windowWhileOneByOneStartingDelimiterReplenishes() { AtomicLong req = new AtomicLong(); Flux<String> source = Flux.just("#", "1A", "1B", "1C", "#", "2A", "2B", "2C", "2D", "#", "3A").hide(); StepVerifier.create( source .doOnRequest(r -> req.addAndGet(r)) .log("source", Level.FINE) .windowWhile(s -> !"#".equals(s), 2) .log("windowWhile", Level.FINE) .concatMap(w -> w.collectList() .log("window", Level.FINE) , 1) .log("downstream", Level.FINE) , StepVerifierOptions.create().checkUnderRequesting(false).initialRequest(1)) .expectNextMatches(List::isEmpty) .thenRequest(1) .assertNext(l -> assertThat(l).containsExactly("1A", "1B", "1C")) .thenRequest(1) .assertNext(l -> assertThat(l).containsExactly("2A", "2B", "2C", "2D")) .thenRequest(1) .assertNext(l -> assertThat(l).containsExactly("3A")) .expectComplete() .verify(Duration.ofSeconds(1)); //TODO is there something wrong here? concatMap now falls back to no fusion because of THREAD_BARRIER, and this results in 15 request total, not 13 assertThat(req.get()).isGreaterThanOrEqualTo(13); //11 elements + the prefetch }
@Test(timeout = 1000L) public void lowRequestCheckCanBeDisabled() { StepVerifier.create(Flux.just(1, 2), StepVerifierOptions.create().initialRequest(1).checkUnderRequesting(false)) .expectNext(1) .thenConsumeWhile(s -> s == 1); //don't verify, this alone would throw an exception if check activated }
@Test public void recursiveCountdownBackpressure() { StepVerifier.create(Mono.just(10) .expand(countDown), StepVerifierOptions.create() .initialRequest(0) .checkUnderRequesting(false)) .thenRequest(1) .expectNext(10) .thenRequest(3) .expectNext(9, 8, 7) .thenRequest(4) .expectNext(6, 5, 4, 3) .thenRequest(3) .expectNext(2, 1, 0) .verifyComplete(); }
@Test public void recursiveCountdownBackpressureDepth() { StepVerifier.create(Mono.just(10) .expandDeep(countDown), StepVerifierOptions.create() .initialRequest(0) .checkUnderRequesting(false)) .thenRequest(1) .expectNext(10) .thenRequest(3) .expectNext(9, 8, 7) .thenRequest(4) .expectNext(6, 5, 4, 3) .thenRequest(3) .expectNext(2, 1, 0) .verifyComplete(); }
@Test public void recursiveCountdownBackpressure() { StepVerifier.create(Flux.just(10) .expand(countDown), StepVerifierOptions.create() .initialRequest(0) .checkUnderRequesting(false)) .thenRequest(1) .expectNext(10) .thenRequest(3) .expectNext(9, 8, 7) .thenRequest(4) .expectNext(6, 5, 4, 3) .thenRequest(3) .expectNext(2, 1, 0) .verifyComplete(); }
@Test public void recursiveCountdownBackpressureDepth() { StepVerifier.create(Flux.just(10) .expandDeep(countDown), StepVerifierOptions.create() .initialRequest(0) .checkUnderRequesting(false)) .thenRequest(1) .expectNext(10) .thenRequest(3) .expectNext(9, 8, 7) .thenRequest(4) .expectNext(6, 5, 4, 3) .thenRequest(3) .expectNext(2, 1, 0) .verifyComplete(); }