From 16c7ddeeb990f3f9c3dc8a25ed3a316743e800d8 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 16 Sep 2020 12:02:46 -0700 Subject: [PATCH] Mock the Region.getAll(:Collection) operation. --- .../tests/mock/GemFireMockObjectsSupport.java | 18 +++++++ ...ataAccessOperationsAndEventsUnitTests.java | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/mock/GemFireMockObjectsSupport.java b/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/mock/GemFireMockObjectsSupport.java index 61795b8..1ee8077 100644 --- a/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/mock/GemFireMockObjectsSupport.java +++ b/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/mock/GemFireMockObjectsSupport.java @@ -50,6 +50,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -2404,6 +2405,23 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport { }).when(mockRegion).get(ArgumentMatchers.any()); + // Region.getAll(:Collection) + doAnswer(invocation -> { + + Collection keys = invocation.getArgument(0); + + Map result = new HashMap<>(keys.size()); + + for (K key : keys) { + if (key != null) { + result.put(key, mockRegion.get(key)); + } + } + + return result; + + }).when(mockRegion).getAll(any(Collection.class)); + // Region.getEntry(key) when(mockRegion.getEntry(ArgumentMatchers.any())).thenAnswer(regionGetEntryInvocation -> data.entrySet().stream() diff --git a/spring-data-geode-test/src/test/java/org/springframework/data/gemfire/tests/MockRegionDataAccessOperationsAndEventsUnitTests.java b/spring-data-geode-test/src/test/java/org/springframework/data/gemfire/tests/MockRegionDataAccessOperationsAndEventsUnitTests.java index d7438e3..ea4305f 100644 --- a/spring-data-geode-test/src/test/java/org/springframework/data/gemfire/tests/MockRegionDataAccessOperationsAndEventsUnitTests.java +++ b/spring-data-geode-test/src/test/java/org/springframework/data/gemfire/tests/MockRegionDataAccessOperationsAndEventsUnitTests.java @@ -19,7 +19,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.isNotNull; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; @@ -30,7 +32,9 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.springframework.data.gemfire.util.RuntimeExceptionFactory.newIllegalStateException; +import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -55,6 +59,7 @@ import org.apache.geode.cache.LoaderHelper; import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionAttributes; import org.apache.geode.cache.RegionService; +import org.apache.geode.internal.cache.LoaderHelperImpl; import org.springframework.data.gemfire.tests.mock.GemFireMockObjectsSupport; import org.springframework.data.gemfire.tests.support.MapBuilder; @@ -564,4 +569,48 @@ public class MockRegionDataAccessOperationsAndEventsUnitTests { assertThat(entryStrings).containsExactlyInAnyOrder("1-TEST", "2-MOCK"); } + + @Test + public void regionGetAllForKeysIsCorrect() { + + Map expectedResults = MapBuilder.newMapBuilder() + .put(1, "ONE") + .put(2, "TWO") + .put(3, "THREE") + .put(4, "FOUR") + .put(5, null) + .build(); + + List keys = Arrays.asList(null, 1, 2, null, 3, null, 4, 5); + + CacheLoader mockCacheLoader = mock(CacheLoader.class); + + doAnswer(invocation -> { + + LoaderHelper loaderHelper = invocation.getArgument(0); + + Object key = loaderHelper.getKey(); + + return key != null && key.equals(3) ? "THREE" : null; + + }).when(mockCacheLoader).load(any(LoaderHelper.class)); + + RegionAttributes mockRegionAttributes = this.mockRegion.getAttributes(); + + doReturn(mockCacheLoader).when(mockRegionAttributes).getCacheLoader(); + + this.mockRegion.put(1, "ONE"); + this.mockRegion.put(2, "TWO"); + this.mockRegion.put(4, "FOUR"); + + Map actualResults = this.mockRegion.getAll(keys); + + assertThat(actualResults).isNotNull(); + assertThat(actualResults).isEqualTo(expectedResults); + + verify(this.mockRegion, times(5)).get(isNotNull()); + verify(mockCacheLoader, times(2)).load(isA(LoaderHelper.class)); + verify(mockRegionAttributes, times(2)).getCacheLoader(); + verifyNoMoreInteractions(mockCacheLoader); + } }