From 4a5e3bf0161d08e7af92d6f730f7611787c3dcda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20J=C4=99drzejczyk?= Date: Thu, 7 Nov 2024 15:04:49 +0100 Subject: [PATCH] Using reproducer --- .../reactor/core/publisher/MonoZipTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/reactor-core/src/test/java/reactor/core/publisher/MonoZipTest.java b/reactor-core/src/test/java/reactor/core/publisher/MonoZipTest.java index a913ae717a..099ee73e4d 100644 --- a/reactor-core/src/test/java/reactor/core/publisher/MonoZipTest.java +++ b/reactor-core/src/test/java/reactor/core/publisher/MonoZipTest.java @@ -18,6 +18,7 @@ import java.time.Duration; import java.util.Arrays; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.Test; @@ -26,6 +27,7 @@ import reactor.core.CoreSubscriber; import reactor.core.Exceptions; import reactor.core.Scannable; +import reactor.core.scheduler.Schedulers; import reactor.test.StepVerifier; import reactor.test.subscriber.AssertSubscriber; import reactor.util.function.Tuple2; @@ -41,6 +43,31 @@ public void allEmpty() { .block()).isNull(); } + @Test + public void bug_Test() { + final int numItem = 1000000; + Flux fluxToTest = Flux.range(1, numItem) + .doOnNext(i -> System.out.println("Iteration " + i)) + .flatMap(ignored -> { + Mono mono1 = Mono.empty() + .publishOn(Schedulers.parallel()) // would + // pass the test if not run in parallel scheduler + .map(Optional::of) + .defaultIfEmpty(Optional.empty()); + + Mono mono2 = + Mono.error(new NullPointerException()) + .map(Optional::of) + .defaultIfEmpty(Optional.empty()); + + return Flux.zip(mono1, mono2).log().collectList().log().onErrorResume(e -> Mono.empty()); + }) + // expect upstream will emit error signal only + .flatMap(evt -> Mono.error(new RuntimeException("Unexpected empty list return by collectList of size " + evt.size())) + ); + StepVerifier.create(fluxToTest).expectNextCount(0).verifyComplete(); + } + @Test public void allNonEmptyIterable() { assertThat(Mono.zip(Arrays.asList(Mono.just(1), Mono.just(2)),