Mock the Region.getAll(:Collection<K>) operation.

This commit is contained in:
John Blum
2020-09-16 12:02:46 -07:00
parent 028f9c16da
commit 16c7ddeeb9
2 changed files with 67 additions and 0 deletions

View File

@@ -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.<K>any());
// Region.getAll(:Collection<K>)
doAnswer(invocation -> {
Collection<K> keys = invocation.getArgument(0);
Map<K, V> 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.<K>any())).thenAnswer(regionGetEntryInvocation ->
data.entrySet().stream()

View File

@@ -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<Object, Object> expectedResults = MapBuilder.newMapBuilder()
.put(1, "ONE")
.put(2, "TWO")
.put(3, "THREE")
.put(4, "FOUR")
.put(5, null)
.build();
List<Object> keys = Arrays.asList(null, 1, 2, null, 3, null, 4, 5);
CacheLoader<Object, Object> mockCacheLoader = mock(CacheLoader.class);
doAnswer(invocation -> {
LoaderHelper<Object, Object> loaderHelper = invocation.getArgument(0);
Object key = loaderHelper.getKey();
return key != null && key.equals(3) ? "THREE" : null;
}).when(mockCacheLoader).load(any(LoaderHelper.class));
RegionAttributes<Object, Object> 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<Object, Object> 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);
}
}