@Test public void syncDrainWithPollFailure() { Flux<Integer> p = Mono.just(Arrays.asList(1, 2, 3)) .filter(l -> { throw new IllegalStateException("boom"); }) .flatMapIterable(Function.identity()); StepVerifier.create(p) .expectErrorMessage("boom") .verify(Duration.ofSeconds(1)); } }
public void asyncDrainWithPollFailure() { Flux<Integer> p = Flux.range(1, 3) .collectList() .filter(l -> { throw new IllegalStateException("boom"); }) .flatMapIterable(Function.identity()); StepVerifier.create(p) .expectErrorMessage("boom") .verify(Duration.ofSeconds(1)); }
@Test public void onSuccessCallbackFailureInterruptsOnNext() { LongAdder invoked = new LongAdder(); StepVerifier.create(Mono.just("foo") .doOnSuccess(s -> { invoked.increment(); throw new IllegalArgumentException(s); })) .expectErrorMessage("foo") .verify(); assertEquals(1, invoked.intValue()); }
@Test public void discardOnError() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .bufferWhen(Mono.delay(Duration.ofSeconds(2)), u -> Mono.never())) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3); }
@Test public void discardConditionalOnNextPredicateFail() { StepVerifier.create(Flux.range(1, 10) .hide() .filter(i -> { throw new IllegalStateException("boom"); }) .filter(i -> true) ) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1); }
@Test public void discardOnErrorSkip() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .buffer(4, 5)) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3); }
@Test public void discardOnNextSupplierErrorSkip() { Supplier<List<Integer>> bufferSupplier = () -> null; StepVerifier.create(Flux.just(1, 2, 3, 4, 5) .buffer(3, 4, bufferSupplier)) .expectErrorMessage("The bufferSupplier returned a null buffer") .verifyThenAssertThat() .hasDiscardedExactly(1); }
@Test public void discardOnDrainMapperError() { StepVerifier.create(Flux.just(1, 2, 3) .concatMap(i -> { throw new IllegalStateException("boom"); })) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1); }
@Test public void discardOnError() { //also tests WeakScalar StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .concatMap(i -> Mono.just("value" + i)), 0) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly("value1", 2, 3); //"value1" comes from error cancelling the only inner in flight, the 2 other values are still raw in the queue }
@Test public void sinkApiErrorAfterErrorBubblesAndDrops() { Mono<String> secondIsError = Mono.create(sink -> { sink.error(new IllegalArgumentException("boom1")); sink.error(new IllegalArgumentException("boom2")); }); StepVerifier.create(secondIsError) .expectErrorMessage("boom1") .verifyThenAssertThat() .hasOperatorErrorWithMessage("boom2"); }
@Test public void discardConditionalOnNextPredicateFail() { StepVerifier.create(Flux.range(1, 10) .hide() .filter(i -> { throw new IllegalStateException("boom"); }) .filter(i -> true) ) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1); }
@Test public void discardOnError() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .buffer(Mono.never())) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3); }
@Test public void discardOnError() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .bufferTimeout(10, Duration.ofMillis(100))) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3); } }
@Test public void onSuccessNotCalledOnError() { LongAdder invoked = new LongAdder(); IllegalArgumentException err = new IllegalArgumentException("boom"); StepVerifier.create(Mono.error(err) .doOnSuccess(v -> invoked.increment())) .expectErrorMessage("boom") .verify(); assertEquals(0, invoked.intValue()); }
@Test public void discardOnErrorOverlap() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .buffer(4, 2)) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3, 3); //we already opened a 2nd buffer } }
@Test public void discardOnError() { StepVerifier.create(Flux.just(1, 2, 3) .concatWith(Mono.error(new IllegalStateException("boom"))) .buffer(4)) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1, 2, 3); }
@Test public void discardDelayedOnDrainMapperError() { StepVerifier.create(Flux.just(1, 2, 3) .concatMapDelayError(i -> { throw new IllegalStateException("boom"); })) .expectErrorMessage("boom") .verifyThenAssertThat() .hasDiscardedExactly(1); } }
@Test public void unresolvedException() throws Exception { Mono<Void> mono = createWebHandler(new UnresolvedExceptionHandler()).handle(this.exchange); StepVerifier.create(mono).expectErrorMessage("boo").verify(); assertNull(this.exchange.getResponse().getStatusCode()); }
@Test // SPR-15782 public void shouldFailWithRelativeUrls() { String uri = "/api/v4/groups/1"; Mono<ClientResponse> responseMono = WebClient.builder().build().get().uri(uri).exchange(); StepVerifier.create(responseMono) .expectErrorMessage("URI is not absolute: " + uri) .verify(Duration.ofSeconds(5)); }
@Test public void switchToErrorOnEmptyClientResponseMono() { StepVerifier.create(builder.build().get().uri("/path").exchange()) .expectErrorMessage("The underlying HTTP client completed without emitting a response.") .verify(Duration.ofSeconds(5)); }