Skip to content

Commit 5a8692f

Browse files
committed
https://jira.baeldung.com/browse/BAEL-7787
1 parent 1411714 commit 5a8692f

File tree

5 files changed

+62
-51
lines changed

5 files changed

+62
-51
lines changed

spring-reactive-modules/spring-reactive-client-2/src/main/java/com/baeldung/memoization/FibonacciMemoization.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
public class FibonacciMemoization {
1010

1111
private static final Map<Integer, Long> cache = new HashMap<>();
12-
private static Logger logger = LoggerFactory.getLogger(FibonacciMemoization.class);
12+
private static final Logger logger = LoggerFactory.getLogger(FibonacciMemoization.class);
1313

14-
static long fibonacci(int n) {
14+
public static long fibonacci(int n) {
1515
if (n <= 1) {
1616
return n;
1717
}

spring-reactive-modules/spring-reactive-client-2/src/main/java/com/baeldung/memoization/MemoizationWithMonoCache.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22

33
import org.springframework.web.reactive.function.client.WebClient;
44
import reactor.core.publisher.Mono;
5-
6-
import java.io.IOException;
7-
import java.time.Duration;
85
import java.util.concurrent.atomic.AtomicInteger;
96

107
public class MemoizationWithMonoCache {
118

12-
static WebClient client = WebClient.create("https://jsonplaceholder.typicode.com/users");
9+
WebClient client = WebClient.create("https://jsonplaceholder.typicode.com/users");
1310

14-
static AtomicInteger counter = new AtomicInteger(0);
11+
AtomicInteger counter = new AtomicInteger(0);
1512

16-
static Mono<User> retrieveOneUser(int id) {
13+
public Mono<User> retrieveOneUser(int id) {
1714
return client.get()
1815
.uri("/{id}", id)
1916
.retrieve()

spring-reactive-modules/spring-reactive-client-2/src/test/java/com/baeldung/memoization/FibonacciMemoizationUnitTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class FibonacciMemoizationUnitTest {
88

99
@Test
1010
void givenFibonacciNumber_whenFirstOccurenceIscache_thenReturnCacheResultOnSecondCall() {
11-
1211
assertEquals(5, FibonacciMemoization.fibonacci(5));
1312
assertEquals(2, FibonacciMemoization.fibonacci(3));
1413
assertEquals(55, FibonacciMemoization.fibonacci(10));

spring-reactive-modules/spring-reactive-client-2/src/test/java/com/baeldung/memoization/MemoizationWithMonoCacheUnitTest.java

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,84 @@
33
import org.junit.jupiter.api.Test;
44
import reactor.core.Disposable;
55
import reactor.core.publisher.Mono;
6-
import reactor.test.StepVerifier;
76

7+
import java.time.Duration;
88
import java.util.concurrent.atomic.AtomicReference;
99

1010
import static org.junit.jupiter.api.Assertions.assertEquals;
1111

1212
class MemoizationWithMonoCacheUnitTest {
1313

14+
@Test
15+
void givenRetrievedUser_whenTheCallToRemoteIsNotCache_thenReturnInvocationCountAndCompareResult() {
16+
17+
MemoizationWithMonoCache memoizationWithMonoCache = new MemoizationWithMonoCache();
18+
19+
Mono<User> retrieveOneUser = memoizationWithMonoCache.retrieveOneUser(1);
20+
AtomicReference<User> firstUser = new AtomicReference<>();
21+
AtomicReference<User> secondUser = new AtomicReference<>();
22+
23+
Disposable firstUserCall = retrieveOneUser.map(user -> {
24+
firstUser.set(user);
25+
return user.getName();
26+
})
27+
.subscribe();
28+
29+
Disposable secondUserCall = retrieveOneUser.map(user -> {
30+
secondUser.set(user);
31+
return user.getName();
32+
})
33+
.subscribe();
34+
35+
assertEquals(2, memoizationWithMonoCache.getCounter());
36+
assertEquals(firstUser.get(), secondUser.get());
37+
38+
}
39+
1440
@Test
1541
void givenRetrievedUser_whenTheCallToRemoteIsCache_thenReturnInvocationCountAndCompareResult() {
1642

1743
MemoizationWithMonoCache memoizationWithMonoCache = new MemoizationWithMonoCache();
1844

19-
Mono<User> userCall = MemoizationWithMonoCache.retrieveOneUser(1)
45+
Mono<User> retrieveOneUser = memoizationWithMonoCache.retrieveOneUser(1)
2046
.cache();
2147
AtomicReference<User> firstUser = new AtomicReference<>();
2248
AtomicReference<User> secondUser = new AtomicReference<>();
2349

24-
Disposable firstUserCall = userCall.map(user -> {
50+
Disposable firstUserCall = retrieveOneUser.map(user -> {
51+
firstUser.set(user);
52+
return user.getName();
53+
})
54+
.subscribe();
55+
56+
Disposable secondUserCall = retrieveOneUser.map(user -> {
57+
secondUser.set(user);
58+
return user.getName();
59+
})
60+
.subscribe();
61+
62+
assertEquals(1, memoizationWithMonoCache.getCounter());
63+
assertEquals(firstUser.get(), secondUser.get());
64+
65+
}
66+
67+
@Test
68+
void givenRetrievedUser_whenTheCallToRemoteIsCacheWithSuration_thenReturnInvocationCountAndCompareResult() {
69+
70+
MemoizationWithMonoCache memoizationWithMonoCache = new MemoizationWithMonoCache();
71+
72+
Mono<User> retrieveOneUser = memoizationWithMonoCache.retrieveOneUser(1)
73+
.cache(Duration.ofMinutes(5));
74+
AtomicReference<User> firstUser = new AtomicReference<>();
75+
AtomicReference<User> secondUser = new AtomicReference<>();
76+
77+
Disposable firstUserCall = retrieveOneUser.map(user -> {
2578
firstUser.set(user);
2679
return user.getName();
2780
})
2881
.subscribe();
2982

30-
Disposable secondUserCall = userCall.map(user -> {
83+
Disposable secondUserCall = retrieveOneUser.map(user -> {
3184
secondUser.set(user);
3285
return user.getName();
3386
})

spring-reactive-modules/spring-reactive-client-2/src/test/java/com/baeldung/memoization/RetrieveAndExchangeBenchmark.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)