blob: f7639791340986235f8aacddfd8cb87d7fea36c4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.internal.cache;
import static org.apache.geode.distributed.internal.ClusterDistributionManager.LOCATOR_DM_TYPE;
import static org.apache.geode.distributed.internal.InternalDistributedSystem.ALLOW_MULTIPLE_SYSTEMS_PROPERTY;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.NotSerializableException;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.IntStream;
import io.micrometer.core.instrument.MeterRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.RestoreSystemProperties;
import org.apache.geode.CancelCriterion;
import org.apache.geode.SerializationException;
import org.apache.geode.cache.CacheClosedException;
import org.apache.geode.cache.client.PoolFactory;
import org.apache.geode.cache.server.CacheServer;
import org.apache.geode.cache.wan.GatewayReceiver;
import org.apache.geode.distributed.internal.DistributionConfig;
import org.apache.geode.distributed.internal.DistributionManager;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.distributed.internal.ReplyProcessor21;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.SystemTimer;
import org.apache.geode.internal.cache.GemFireCacheImpl.ReplyProcessor21Factory;
import org.apache.geode.internal.cache.control.InternalResourceManager;
import org.apache.geode.internal.cache.control.ResourceAdvisor;
import org.apache.geode.internal.cache.eviction.HeapEvictor;
import org.apache.geode.internal.security.SecurityService;
import org.apache.geode.management.internal.JmxManagerAdvisor;
import org.apache.geode.pdx.internal.TypeRegistry;
import org.apache.geode.test.awaitility.GeodeAwaitility;
import org.apache.geode.test.junit.rules.ExecutorServiceRule;
/**
* Unit tests for {@link GemFireCacheImpl}.
*/
public class GemFireCacheImplTest {
private CacheConfig cacheConfig;
private InternalDistributedSystem internalDistributedSystem;
private PoolFactory poolFactory;
private ReplyProcessor21Factory replyProcessor21Factory;
private TypeRegistry typeRegistry;
private GemFireCacheImpl gemFireCacheImpl;
@Rule
public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
@Rule
public ExecutorServiceRule executorServiceRule = new ExecutorServiceRule();
@Before
public void setUp() {
cacheConfig = mock(CacheConfig.class);
internalDistributedSystem = mock(InternalDistributedSystem.class);
poolFactory = mock(PoolFactory.class);
replyProcessor21Factory = mock(ReplyProcessor21Factory.class);
typeRegistry = mock(TypeRegistry.class);
DistributionConfig distributionConfig = mock(DistributionConfig.class);
when(distributionConfig.getUseSharedConfiguration()).thenReturn(false);
DistributionManager distributionManager = mock(DistributionManager.class);
ReplyProcessor21 replyProcessor21 = mock(ReplyProcessor21.class);
when(distributionConfig.getSecurityProps())
.thenReturn(new Properties());
when(internalDistributedSystem.getConfig())
.thenReturn(distributionConfig);
when(internalDistributedSystem.getDistributionManager())
.thenReturn(distributionManager);
when(internalDistributedSystem.getCancelCriterion())
.thenReturn(mock(CancelCriterion.class));
when(replyProcessor21.getProcessorId())
.thenReturn(21);
when(replyProcessor21Factory.create(any(), any()))
.thenReturn(replyProcessor21);
gemFireCacheImpl = gemFireCacheImpl(false);
}
@After
public void tearDown() {
if (gemFireCacheImpl != null) {
gemFireCacheImpl.close();
}
}
@Test
public void canBeMocked() {
GemFireCacheImpl gemFireCacheImpl = mock(GemFireCacheImpl.class);
InternalResourceManager internalResourceManager = mock(InternalResourceManager.class);
when(gemFireCacheImpl.getInternalResourceManager())
.thenReturn(internalResourceManager);
assertThat(gemFireCacheImpl.getInternalResourceManager())
.isSameAs(internalResourceManager);
}
@Test
public void checkPurgeCCPTimer() {
SystemTimer cacheClientProxyTimer = mock(SystemTimer.class);
gemFireCacheImpl.setCCPTimer(cacheClientProxyTimer);
for (int i = 1; i < GemFireCacheImpl.PURGE_INTERVAL; i++) {
gemFireCacheImpl.purgeCCPTimer();
verify(cacheClientProxyTimer,
times(0))
.timerPurge();
}
gemFireCacheImpl.purgeCCPTimer();
verify(cacheClientProxyTimer,
times(1))
.timerPurge();
for (int i = 1; i < GemFireCacheImpl.PURGE_INTERVAL; i++) {
gemFireCacheImpl.purgeCCPTimer();
verify(cacheClientProxyTimer,
times(1))
.timerPurge();
}
gemFireCacheImpl.purgeCCPTimer();
verify(cacheClientProxyTimer,
times(2))
.timerPurge();
}
@Test
public void registerPdxMetaDataThrowsIfInstanceNotSerializable() {
Throwable thrown = catchThrowable(() -> gemFireCacheImpl.registerPdxMetaData(new Object()));
assertThat(thrown)
.isInstanceOf(SerializationException.class)
.hasMessage("Serialization failed")
.hasCauseInstanceOf(NotSerializableException.class);
}
@Test
public void registerPdxMetaDataThrowsIfInstanceIsNotPDX() {
Throwable thrown = catchThrowable(() -> {
gemFireCacheImpl.registerPdxMetaData("string");
});
assertThat(thrown)
.isInstanceOf(SerializationException.class)
.hasMessage("The instance is not PDX serializable");
}
@Test
public void checkThatAsyncEventListenersUseAllThreadsInPool() {
gemFireCacheImpl = gemFireCacheImpl(true);
ThreadPoolExecutor eventThreadPoolExecutor =
(ThreadPoolExecutor) gemFireCacheImpl.getEventThreadPool();
assertThat(eventThreadPoolExecutor.getCompletedTaskCount())
.isZero();
assertThat(eventThreadPoolExecutor.getActiveCount())
.isZero();
int eventThreadLimit = GemFireCacheImpl.EVENT_THREAD_LIMIT;
CountDownLatch threadLatch = new CountDownLatch(eventThreadLimit);
for (int i = 1; i <= eventThreadLimit; i++) {
eventThreadPoolExecutor.execute(() -> {
threadLatch.countDown();
try {
threadLatch.await();
} catch (InterruptedException ignore) {
// ignored
}
});
}
await().untilAsserted(() -> {
assertThat(eventThreadPoolExecutor.getCompletedTaskCount())
.isEqualTo(eventThreadLimit);
});
}
@Test
public void getCacheClosedException_withoutReasonOrCauseGivesExceptionWithoutEither() {
CacheClosedException value = gemFireCacheImpl.getCacheClosedException(null, null);
assertThat(value.getCause())
.isNull();
assertThat(value.getMessage())
.isNull();
}
@Test
public void getCacheClosedException_withoutCauseGivesExceptionWithReason() {
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message");
assertThat(value.getCause())
.isNull();
assertThat(value.getMessage())
.isEqualTo("message");
}
@Test
public void getCacheClosedException_returnsExceptionWithProvidedCauseAndReason() {
Throwable cause = new Throwable();
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message", cause);
assertThat(value.getCause())
.isEqualTo(cause);
assertThat(value.getMessage())
.isEqualTo("message");
}
@Test
public void getCacheClosedException_prefersGivenCauseWhenDisconnectExceptionExists() {
gemFireCacheImpl.setDisconnectCause(new Throwable("disconnectCause"));
Throwable cause = new Throwable();
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message", cause);
assertThat(value.getCause())
.isEqualTo(cause);
assertThat(value.getMessage())
.isEqualTo("message");
}
@Test
public void getCacheClosedException_withoutCauseGiven_providesDisconnectExceptionIfExists() {
Throwable disconnectCause = new Throwable("disconnectCause");
gemFireCacheImpl.setDisconnectCause(disconnectCause);
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message");
assertThat(value.getCause())
.isEqualTo(disconnectCause);
assertThat(value.getMessage())
.isEqualTo("message");
}
@Test
public void getCacheClosedException_returnsExceptionWithProvidedReason() {
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message");
assertThat(value.getMessage())
.isEqualTo("message");
assertThat(value.getCause())
.isNull();
}
@Test
public void getCacheClosedException_returnsExceptionWithoutMessageWhenReasonNotGiven() {
CacheClosedException value = gemFireCacheImpl.getCacheClosedException(null);
assertThat(value.getMessage())
.isEqualTo(null);
assertThat(value.getCause())
.isNull();
}
@Test
public void getCacheClosedException_returnsExceptionWithDisconnectCause() {
Throwable disconnectCause = new Throwable("disconnectCause");
gemFireCacheImpl.setDisconnectCause(disconnectCause);
CacheClosedException value = gemFireCacheImpl.getCacheClosedException("message");
assertThat(value.getMessage())
.isEqualTo("message");
assertThat(value.getCause())
.isEqualTo(disconnectCause);
}
@Test
public void addGatewayReceiverDoesNotAllowMoreThanOneGatewayReceiver() {
GatewayReceiver receiver = mock(GatewayReceiver.class);
GatewayReceiver receiver2 = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(receiver);
gemFireCacheImpl.addGatewayReceiver(receiver2);
assertThat(gemFireCacheImpl.getGatewayReceivers())
.containsOnly(receiver2);
}
@Test
public void addGatewayReceiverRequiresSuppliedGatewayReceiver() {
Throwable thrown = catchThrowable(() -> gemFireCacheImpl.addGatewayReceiver(null));
assertThat(thrown)
.isInstanceOf(NullPointerException.class);
}
@Test
public void addGatewayReceiverAddsGatewayReceiver() {
GatewayReceiver receiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(receiver);
assertThat(gemFireCacheImpl.getGatewayReceivers())
.hasSize(1);
}
@Test
public void removeGatewayReceiverRemovesGatewayReceiver() {
GatewayReceiver receiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(receiver);
gemFireCacheImpl.removeGatewayReceiver(receiver);
assertThat(gemFireCacheImpl.getGatewayReceivers())
.isEmpty();
}
@Test
public void addCacheServerAddsOneCacheServer() {
gemFireCacheImpl.addCacheServer();
assertThat(gemFireCacheImpl.getCacheServers())
.hasSize(1);
}
@Test
public void removeCacheServerRemovesSpecifiedCacheServer() {
CacheServer cacheServer = gemFireCacheImpl.addCacheServer();
gemFireCacheImpl.removeCacheServer(cacheServer);
assertThat(gemFireCacheImpl.getCacheServers())
.isEmpty();
}
@Test
public void testIsMisConfigured() {
Properties clusterProps = new Properties();
Properties serverProps = new Properties();
// both does not have the key
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
// cluster has the key, not the server
clusterProps.setProperty("key", "value");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
clusterProps.setProperty("key", "");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
// server has the key, not the cluster
clusterProps.clear();
serverProps.clear();
serverProps.setProperty("key", "value");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isTrue();
serverProps.setProperty("key", "");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
// server has the key, not the cluster
clusterProps.clear();
serverProps.clear();
clusterProps.setProperty("key", "");
serverProps.setProperty("key", "value");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isTrue();
serverProps.setProperty("key", "");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
// server and cluster has the same value
clusterProps.clear();
serverProps.clear();
clusterProps.setProperty("key", "value");
serverProps.setProperty("key", "value");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
clusterProps.setProperty("key", "");
serverProps.setProperty("key", "");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
// server and cluster has the different value
clusterProps.clear();
serverProps.clear();
clusterProps.setProperty("key", "value1");
serverProps.setProperty("key", "value2");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isTrue();
clusterProps.setProperty("key", "value1");
serverProps.setProperty("key", "");
assertThat(GemFireCacheImpl.isMisConfigured(clusterProps, serverProps, "key")).isFalse();
}
@Test
public void clientCacheDoesNotRequestClusterConfig() {
System.setProperty(ALLOW_MULTIPLE_SYSTEMS_PROPERTY, "true");
gemFireCacheImpl = mock(GemFireCacheImpl.class);
when(internalDistributedSystem.getCache()).thenReturn(gemFireCacheImpl);
new InternalCacheBuilder()
.setIsClient(true)
.create(internalDistributedSystem);
verify(gemFireCacheImpl,
times(0))
.requestSharedConfiguration();
verify(gemFireCacheImpl,
times(0))
.applyJarAndXmlFromClusterConfig();
}
@Test
public void getMeterRegistry_returnsTheSystemMeterRegistry() {
MeterRegistry systemMeterRegistry = mock(MeterRegistry.class);
when(internalDistributedSystem.getMeterRegistry()).thenReturn(systemMeterRegistry);
assertThat(gemFireCacheImpl.getMeterRegistry())
.isSameAs(systemMeterRegistry);
}
@Test
public void addGatewayReceiverServer_requiresPreviouslyAddedGatewayReceiver() {
Throwable thrown = catchThrowable(() -> {
gemFireCacheImpl.addGatewayReceiverServer(mock(GatewayReceiver.class));
});
assertThat(thrown)
.isInstanceOf(NullPointerException.class);
}
@Test
public void addGatewayReceiverServer_requiresSuppliedGatewayReceiver() {
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
Throwable thrown = catchThrowable(() -> gemFireCacheImpl.addGatewayReceiverServer(null));
assertThat(thrown)
.isInstanceOf(NullPointerException.class);
}
@Test
public void addGatewayReceiverServer_addsCacheServer() {
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
InternalCacheServer receiverServer = gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
assertThat(gemFireCacheImpl.getCacheServersAndGatewayReceiver())
.containsOnly(receiverServer);
}
@Test
public void getCacheServers_isEmptyByDefault() {
List<CacheServer> value = gemFireCacheImpl.getCacheServers();
assertThat(value)
.isEmpty();
}
@Test
public void getCacheServers_returnsAddedCacheServer() {
CacheServer cacheServer = gemFireCacheImpl.addCacheServer();
List<CacheServer> value = gemFireCacheImpl.getCacheServers();
assertThat(value)
.containsExactly(cacheServer);
}
@Test
public void getCacheServers_returnsMultipleAddedCacheServers() {
CacheServer cacheServer1 = gemFireCacheImpl.addCacheServer();
CacheServer cacheServer2 = gemFireCacheImpl.addCacheServer();
CacheServer cacheServer3 = gemFireCacheImpl.addCacheServer();
List<CacheServer> value = gemFireCacheImpl.getCacheServers();
assertThat(value)
.containsExactlyInAnyOrder(cacheServer1, cacheServer2, cacheServer3);
}
@Test
public void getCacheServers_isStillEmptyAfterAddingGatewayReceiverServer() {
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
List<CacheServer> value = gemFireCacheImpl.getCacheServers();
assertThat(value)
.isEmpty();
}
@Test
public void getCacheServers_doesNotIncludeGatewayReceiverServer() {
CacheServer cacheServer1 = gemFireCacheImpl.addCacheServer();
CacheServer cacheServer2 = gemFireCacheImpl.addCacheServer();
CacheServer cacheServer3 = gemFireCacheImpl.addCacheServer();
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
List<CacheServer> value = gemFireCacheImpl.getCacheServers();
assertThat(value)
.containsExactlyInAnyOrder(cacheServer1, cacheServer2, cacheServer3);
}
@Test
public void getCacheServersAndGatewayReceiver_isEmptyByDefault() {
List<InternalCacheServer> value = gemFireCacheImpl.getCacheServersAndGatewayReceiver();
assertThat(value)
.isEmpty();
}
@Test
public void getCacheServersAndGatewayReceiver_includesCacheServers() {
InternalCacheServer cacheServer1 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
InternalCacheServer cacheServer2 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
InternalCacheServer cacheServer3 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
List<InternalCacheServer> value = gemFireCacheImpl.getCacheServersAndGatewayReceiver();
assertThat(value)
.containsExactlyInAnyOrder(cacheServer1, cacheServer2, cacheServer3);
}
@Test
public void getCacheServersAndGatewayReceiver_includesGatewayReceiver() {
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
InternalCacheServer receiverServer = gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
List<InternalCacheServer> value = gemFireCacheImpl.getCacheServersAndGatewayReceiver();
assertThat(value)
.containsExactly(receiverServer);
}
@Test
public void getCacheServersAndGatewayReceiver_includesCacheServersAndGatewayReceiver() {
InternalCacheServer cacheServer1 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
InternalCacheServer cacheServer2 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
InternalCacheServer cacheServer3 = (InternalCacheServer) gemFireCacheImpl.addCacheServer();
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
InternalCacheServer receiverServer = gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
List<InternalCacheServer> value = gemFireCacheImpl.getCacheServersAndGatewayReceiver();
assertThat(value)
.containsExactlyInAnyOrder(cacheServer1, cacheServer2, cacheServer3, receiverServer);
}
@Test
public void isServer_isFalseByDefault() {
boolean value = gemFireCacheImpl.isServer();
assertThat(value)
.isFalse();
}
@Test
public void isServer_isTrueIfIsServerIsSet() {
gemFireCacheImpl.setIsServer(true);
boolean value = gemFireCacheImpl.isServer();
assertThat(value)
.isTrue();
}
@Test
public void isServer_isTrueIfCacheServerExists() {
gemFireCacheImpl.addCacheServer();
boolean value = gemFireCacheImpl.isServer();
assertThat(value)
.isTrue();
}
@Test
public void isServer_isFalseEvenIfGatewayReceiverServerExists() {
GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class);
gemFireCacheImpl.addGatewayReceiver(gatewayReceiver);
gemFireCacheImpl.addGatewayReceiverServer(gatewayReceiver);
boolean value = gemFireCacheImpl.isServer();
assertThat(value)
.isFalse();
}
@Test
public void getCacheServers_isCanonical() {
assertThat(gemFireCacheImpl.getCacheServers())
.isSameAs(gemFireCacheImpl.getCacheServers());
}
@Test
public void testMultiThreadLockUnlockDiskStore() throws InterruptedException {
int nThread = 10;
String diskStoreName = "MyDiskStore";
AtomicInteger nTrue = new AtomicInteger();
AtomicInteger nFalse = new AtomicInteger();
IntStream.range(0, nThread).forEach(tid -> {
executorServiceRule.submit(() -> {
try {
boolean lockResult = gemFireCacheImpl.doLockDiskStore(diskStoreName);
if (lockResult) {
nTrue.incrementAndGet();
} else {
nFalse.incrementAndGet();
}
} finally {
boolean unlockResult = gemFireCacheImpl.doUnlockDiskStore(diskStoreName);
if (unlockResult) {
nTrue.incrementAndGet();
} else {
nFalse.incrementAndGet();
}
}
});
});
executorServiceRule.getExecutorService().shutdown();
executorServiceRule.getExecutorService()
.awaitTermination(GeodeAwaitility.getTimeout().toNanos(), TimeUnit.NANOSECONDS);
// 1 thread returns true for locking, all 10 threads return true for unlocking
assertThat(nTrue.get()).isEqualTo(11);
// 9 threads return false for locking
assertThat(nFalse.get()).isEqualTo(9);
}
@Test
public void cacheXmlGenerationErrorDisablesAutoReconnect() {
gemFireCacheImpl.prepareForReconnect((printWriter) -> {
throw new RuntimeException("error generating cache XML");
});
verify(internalDistributedSystem.getConfig()).setDisableAutoReconnect(Boolean.TRUE);
verify(cacheConfig, never()).setCacheXMLDescription(isA(String.class));
}
@Test
public void anythingThrownDuringInitializeDeclarativeCacheShouldBeCaughtAndFinallyCloseCache() {
InternalDistributedMember internalDistributedMember = mock(InternalDistributedMember.class);
when(internalDistributedSystem.getDistributedMember()).thenReturn(internalDistributedMember);
DistributionConfig distributionConfig = mock(DistributionConfig.class);
when(internalDistributedSystem.getConfig()).thenReturn(distributionConfig);
File file = mock(File.class);
when(distributionConfig.getDeployWorkingDir()).thenReturn(file);
when(file.canWrite()).thenReturn(true);
when(file.listFiles()).thenReturn(new File[0]);
when(file.list()).thenReturn(new String[0]);
when(internalDistributedMember.getVmKind()).thenReturn(LOCATOR_DM_TYPE);
when(internalDistributedSystem.getDistributedMember())
.thenThrow(new Error("Expected error by test."));
assertThat(gemFireCacheImpl.isClosed()).isFalse();
assertThatThrownBy(() -> gemFireCacheImpl.initialize()).isInstanceOf(Error.class)
.hasMessageContaining("Expected error by test.");
assertThat(gemFireCacheImpl.isClosed()).isTrue();
}
@SuppressWarnings({"LambdaParameterHidesMemberVariable", "OverlyCoupledMethod", "unchecked"})
private GemFireCacheImpl gemFireCacheImpl(boolean useAsyncEventListeners) {
return new GemFireCacheImpl(
false,
poolFactory,
internalDistributedSystem,
cacheConfig,
useAsyncEventListeners,
typeRegistry,
mock(Consumer.class),
(properties, cacheConfigArg) -> mock(SecurityService.class),
() -> true,
mock(Function.class),
mock(Function.class),
(factory, clock) -> mock(CachePerfStats.class),
mock(GemFireCacheImpl.TXManagerImplFactory.class),
mock(Supplier.class),
distributionAdvisee -> mock(ResourceAdvisor.class),
mock(Function.class),
jmxManagerAdvisee -> mock(JmxManagerAdvisor.class),
internalCache -> mock(InternalResourceManager.class),
() -> 1,
(cache, statisticsClock) -> mock(HeapEvictor.class),
mock(Runnable.class),
mock(Runnable.class),
mock(Runnable.class),
mock(Function.class),
mock(Consumer.class),
mock(GemFireCacheImpl.TypeRegistryFactory.class),
mock(Consumer.class),
mock(Consumer.class),
o -> mock(SystemTimer.class),
internalCache -> mock(TombstoneService.class),
internalDistributedSystem -> mock(ExpirationScheduler.class),
file -> mock(DiskStoreMonitor.class),
() -> mock(RegionEntrySynchronizationListener.class),
mock(Function.class),
mock(Function.class),
mock(TXEntryStateFactory.class),
replyProcessor21Factory);
}
}