From a3fe1ee72f4aeadd54d1dd69d2d6d25c69fd875b Mon Sep 17 00:00:00 2001 From: kaushal Date: Sat, 5 Jun 2021 13:25:29 +0530 Subject: [PATCH 1/3] BAEL-4126 --- reactor-core/pom.xml | 6 ++ .../java/com/baeldung/mono/MonoUnitTest.java | 83 +++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/reactor-core/pom.xml b/reactor-core/pom.xml index 6eead97bc2..6bd725b3b5 100644 --- a/reactor-core/pom.xml +++ b/reactor-core/pom.xml @@ -32,6 +32,12 @@ ${assertj.version} test + + org.projectlombok + lombok + RELEASE + test + diff --git a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java index 0c6e0c07ef..2738b8f069 100644 --- a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java +++ b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java @@ -1,10 +1,12 @@ package com.baeldung.mono; +import lombok.extern.slf4j.Slf4j; import org.junit.Test; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; +import java.awt.image.SampleModel; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; @@ -13,6 +15,7 @@ import java.util.Optional; import static org.junit.Assert.assertEquals; +@Slf4j public class MonoUnitTest { @Test public void whenMonoProducesString_thenBlockAndConsume() { @@ -80,4 +83,84 @@ public class MonoUnitTest { return Mono.just(list); } + + @Test + public void whenEmptyList_thenMonoDeferExecuted() { + + Mono> emptyList = Mono.defer(() -> monoOfEmptyList()); + + //Empty list, hence Mono publisher in switchIfEmpty executed after condition evaluation + Flux emptyListElements = emptyList.flatMapIterable(l -> l) + .switchIfEmpty(Mono.defer(() -> sampleMsg("EmptyList"))) + .log(); + + StepVerifier.create(emptyListElements) + .expectNext("EmptyList") + .verifyComplete(); + } + + @Test + public void whenNonEmptyList_thenMonoDeferNotExecuted() { + + Mono> nonEmptyist = Mono.defer(() -> monoOfList()); + + //Non empty list, hence Mono publisher in switchIfEmpty won't evaluated. + Flux listElements = nonEmptyist.flatMapIterable(l -> l) + .switchIfEmpty(Mono.defer(() -> sampleMsg("NonEmptyList"))) + .log(); + + StepVerifier.create(listElements) + .expectNext("one", "two", "three", "four") + .verifyComplete(); + } + + private Mono> monoOfEmptyList() { + List list = new ArrayList<>(); + return Mono.just(list); + } + + @Test + public void whenUsingMonoJust_thenEagerEvaluation() throws InterruptedException { + + Mono msg = sampleMsg("Eager Publisher"); + + log.debug("Intermediate Test Message...."); + + StepVerifier.create(msg) + .expectNext("Eager Publisher") + .verifyComplete(); + + Thread.sleep(5000); + + StepVerifier.create(msg) + .expectNext("Eager Publisher") + .verifyComplete(); + } + + @Test + public void whenUsingMonoDefer_thenLazyEvaluation() throws InterruptedException { + + Mono deferMsg = Mono.defer(() -> sampleMsg("Lazy Publisher")); + + log.debug("Intermediate Test Message...."); + + StepVerifier.create(deferMsg) + .expectNext("Lazy Publisher") + .verifyComplete(); + + Thread.sleep(5000); + + StepVerifier.create(deferMsg) + .expectNext("Lazy Publisher") + .verifyComplete(); + + } + + private Mono sampleMsg(String str) { + log.debug("Call to Retrieve Sample Message!! --> {} at: {}", str, System.currentTimeMillis()); + return Mono.just(str); + } } + + + From 8f9227080927287952c09ecafe980f4e608aa196 Mon Sep 17 00:00:00 2001 From: kaushal Date: Sat, 5 Jun 2021 13:27:16 +0530 Subject: [PATCH 2/3] BAEL-4126 --- reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java index 2738b8f069..cbcea26ad4 100644 --- a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java +++ b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java @@ -6,7 +6,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import java.awt.image.SampleModel; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; From 622a8bd8d3879b440add53c43daa2e12c2320ff5 Mon Sep 17 00:00:00 2001 From: kaushal Date: Thu, 10 Jun 2021 18:19:56 +0530 Subject: [PATCH 3/3] updated --- .../java/com/baeldung/mono/MonoUnitTest.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java index cbcea26ad4..fc42620e8e 100644 --- a/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java +++ b/reactor-core/src/test/java/com/baeldung/mono/MonoUnitTest.java @@ -90,12 +90,12 @@ public class MonoUnitTest { //Empty list, hence Mono publisher in switchIfEmpty executed after condition evaluation Flux emptyListElements = emptyList.flatMapIterable(l -> l) - .switchIfEmpty(Mono.defer(() -> sampleMsg("EmptyList"))) - .log(); + .switchIfEmpty(Mono.defer(() -> sampleMsg("EmptyList"))) + .log(); StepVerifier.create(emptyListElements) - .expectNext("EmptyList") - .verifyComplete(); + .expectNext("EmptyList") + .verifyComplete(); } @Test @@ -105,12 +105,12 @@ public class MonoUnitTest { //Non empty list, hence Mono publisher in switchIfEmpty won't evaluated. Flux listElements = nonEmptyist.flatMapIterable(l -> l) - .switchIfEmpty(Mono.defer(() -> sampleMsg("NonEmptyList"))) - .log(); + .switchIfEmpty(Mono.defer(() -> sampleMsg("NonEmptyList"))) + .log(); StepVerifier.create(listElements) - .expectNext("one", "two", "three", "four") - .verifyComplete(); + .expectNext("one", "two", "three", "four") + .verifyComplete(); } private Mono> monoOfEmptyList() { @@ -126,14 +126,14 @@ public class MonoUnitTest { log.debug("Intermediate Test Message...."); StepVerifier.create(msg) - .expectNext("Eager Publisher") - .verifyComplete(); + .expectNext("Eager Publisher") + .verifyComplete(); Thread.sleep(5000); StepVerifier.create(msg) - .expectNext("Eager Publisher") - .verifyComplete(); + .expectNext("Eager Publisher") + .verifyComplete(); } @Test @@ -144,14 +144,14 @@ public class MonoUnitTest { log.debug("Intermediate Test Message...."); StepVerifier.create(deferMsg) - .expectNext("Lazy Publisher") - .verifyComplete(); + .expectNext("Lazy Publisher") + .verifyComplete(); Thread.sleep(5000); StepVerifier.create(deferMsg) - .expectNext("Lazy Publisher") - .verifyComplete(); + .expectNext("Lazy Publisher") + .verifyComplete(); }