VirtualTimeScheduler.set(vts);
@Test public void errorHandlingIntervalMillisRetried() throws InterruptedException { VirtualTimeScheduler virtualTimeScheduler = VirtualTimeScheduler.create(); VirtualTimeScheduler.set(virtualTimeScheduler); Flux<Tuple2<Long,String>> flux = Flux.interval(Duration.ofMillis(250)) .map(input -> { if (input < 3) return "tick " + input; throw new RuntimeException("boom"); }) .retry(1) .elapsed(); // <1> flux.subscribe(System.out::println, System.err::println); // <2> //Thread.sleep(2100); // <3> virtualTimeScheduler.advanceTimeBy(Duration.ofHours(1)); StepVerifier.withVirtualTime(() -> flux, () -> virtualTimeScheduler, Long.MAX_VALUE) .thenAwait(Duration.ofSeconds(3)) .expectNextMatches(t -> t.getT2().equals("tick 0")) .expectNextMatches(t -> t.getT2().equals("tick 1")) .expectNextMatches(t -> t.getT2().equals("tick 2")) .expectNextMatches(t -> t.getT2().equals("tick 0")) .expectNextMatches(t -> t.getT2().equals("tick 1")) .expectNextMatches(t -> t.getT2().equals("tick 2")) .verifyErrorMessage("boom"); }
@Test public void errorHandlingIntervalMillisNotContinued() throws InterruptedException { VirtualTimeScheduler virtualTimeScheduler = VirtualTimeScheduler.create(); VirtualTimeScheduler.set(virtualTimeScheduler); Flux<String> flux = Flux.interval(Duration.ofMillis(250)) .map(input -> { if (input < 3) return "tick " + input; throw new RuntimeException("boom"); }) .onErrorReturn("Uh oh"); flux.subscribe(System.out::println); //Thread.sleep(2100); // <1> virtualTimeScheduler.advanceTimeBy(Duration.ofHours(1)); StepVerifier.withVirtualTime(() -> flux, () -> virtualTimeScheduler, Long.MAX_VALUE) .thenAwait(Duration.ofSeconds(3)) .expectNext("tick 0") .expectNext("tick 1") .expectNext("tick 2") .expectNext("Uh oh") .verifyComplete(); }
VirtualTimeScheduler.set(vts);