Add capability to remember (refer to) and resolve a reference to any (latest) GemFireCache object created by the Apache Geode mock objects test framework.

This commit is contained in:
John Blum
2021-09-13 12:07:33 -07:00
parent ee16dd37ad
commit 227f96e900

View File

@@ -264,6 +264,7 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
private static final boolean DEFAULT_USE_SINGLETON_CACHE = false;
private static final AtomicReference<GemFireCache> cacheReference = new AtomicReference<>(null);
private static final AtomicReference<GemFireCache> singletonCache = new AtomicReference<>(null);
private static final AtomicReference<Properties> gemfireProperties = new AtomicReference<>(new Properties());
@@ -308,6 +309,7 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
*/
public static void destroy() {
cacheReference.set(null);
singletonCache.set(null);
gemfireProperties.set(new Properties());
asyncEventQueues.clear();
@@ -555,6 +557,18 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
return regionPath;
}
/**
* Stores a reference to the given {@link GemFireCache} object.
*
* @param <T> {@link Class type} of {@link GemFireCache} (e.g. client or peer).
* @param gemfireCache reference to the {@link GemFireCache} object to store; maybe {@literal null}.
* @return the given {@link GemFireCache} object.
* @see org.apache.geode.cache.GemFireCache
*/
private static @Nullable <T extends GemFireCache> T referTo(@Nullable T gemfireCache) {
return (T) cacheReference.updateAndGet(currentCacheReference -> gemfireCache);
}
/**
* Remembers the given mock {@link GemFireCache} object, which may be a {@link ClientCache} or a peer {@link Cache}.
*
@@ -607,6 +621,21 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
return mockRegion;
}
/**
* Resolves any {@link GemFireCache} object created by the Spring Test for Apache Geode mock objects test framework.
*
* If {@literal Singleton} caches are not used (default is {@literal false}), then the reference will store the last
* mock {@link GemFireCache} object created by the Apache Geode mock objects test framework.
*
* @param <T> {@link Class type} of {@link GemFireCache} (e.g. client or peer).
* @return a reference to any (and the last) {@ink GemFireCache} object created by this test framework.
* @see org.apache.geode.cache.GemFireCache
* @see java.util.Optional
*/
private static <T extends GemFireCache> Optional<T> resolveAnyGemFireCache() {
return Optional.ofNullable((T) cacheReference.get());
}
/**
* Resolves the single, remembered {@link GemFireCache} if using GemFire in Singleton-mode.
*
@@ -879,14 +908,14 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
when(mockClientCache.createClientRegionFactory(anyString())).thenAnswer(invocation ->
mockClientRegionFactory(mockClientCache, invocation.<String>getArgument(0)));
return mockQueryService(mockCacheApi(mockClientCache));
return referTo(mockQueryService(mockCacheApi(mockClientCache)));
}
public static GemFireCache mockGemFireCache() {
GemFireCache mockGemFireCache = mock(GemFireCache.class);
return mockQueryService(mockCacheApi(mockGemFireCache));
return referTo(mockQueryService(mockCacheApi(mockGemFireCache)));
}
@SuppressWarnings("unchecked")
@@ -961,11 +990,12 @@ public abstract class GemFireMockObjectsSupport extends MockObjectsSupport {
}).when(mockCache).getGatewaySender(anyString());
return mockQueryService(
mockGatewaySenderFactory(
mockGatewayReceiverFactory(
mockAsyncEventQueueFactory(
mockCacheApi(mockCache)))));
return referTo(
mockQueryService(
mockGatewaySenderFactory(
mockGatewayReceiverFactory(
mockAsyncEventQueueFactory(
mockCacheApi(mockCache))))));
}
public static Cache mockAsyncEventQueueFactory(Cache mockCache) {