return withVirtualTime(scenarioSupplier, StepVerifierOptions.create() .initialRequest(n) .virtualTimeSchedulerSupplier(vtsLookup));
@Test public void suppliedVirtualTimeButNoSourceDoesntEnableScheduler() { VirtualTimeScheduler vts = VirtualTimeScheduler.create(); new DefaultStepVerifierBuilder<String>(StepVerifierOptions.create() .initialRequest(Long.MAX_VALUE) .virtualTimeSchedulerSupplier(() -> vts), null) //important to avoid triggering of vts capture-and-enable .expectNoEvent(Duration.ofSeconds(4)) .expectComplete() .toSubscriber(); try { //also test the side effect case where VTS has been enabled and not reset VirtualTimeScheduler current = VirtualTimeScheduler.get(); assertThat(current).isNotSameAs(vts); } catch (IllegalStateException e) { assertThat(e).hasMessageContaining("VirtualTimeScheduler"); } }
@Test(timeout = 4000) public void manuallyManagedVirtualTime() { VirtualTimeScheduler vts = VirtualTimeScheduler.create(); try { VirtualTimeScheduler.getOrSet(vts); assertThat(VirtualTimeScheduler.get()).isSameAs(vts); Flux<String> flux = Flux.just("foo").delayElements(Duration.ofSeconds(4)); DefaultVerifySubscriber<String> s = new DefaultStepVerifierBuilder<String>(StepVerifierOptions.create() .initialRequest(Long.MAX_VALUE) .virtualTimeSchedulerSupplier(() -> vts), null)//important to avoid triggering of vts capture-and-enable .thenAwait(Duration.ofSeconds(1)) .expectNext("foo") .expectComplete() .toSubscriber(); flux.subscribe(s); vts.advanceTimeBy(Duration.ofSeconds(3)); s.verify(); assertThat(s.virtualTimeScheduler()).isSameAs(vts); assertThat(VirtualTimeScheduler.get()).isSameAs(vts); } finally { VirtualTimeScheduler.reset(); } }
return withVirtualTime(scenarioSupplier, StepVerifierOptions.create() .initialRequest(n) .virtualTimeSchedulerSupplier(vtsLookup));