/* * Copyright 2010-2013 the original author or authors. * * Licensed 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.springframework.data.gemfire; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.same; 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.util.concurrent.atomic.AtomicBoolean; import org.apache.geode.cache.Cache; import org.apache.geode.cache.CustomExpiry; import org.apache.geode.cache.DataPolicy; import org.apache.geode.cache.EvictionAttributes; import org.apache.geode.cache.ExpirationAction; import org.apache.geode.cache.ExpirationAttributes; import org.apache.geode.cache.MembershipAttributes; import org.apache.geode.cache.PartitionAttributes; import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionAttributes; import org.apache.geode.cache.RegionFactory; import org.apache.geode.cache.RegionShortcut; import org.apache.geode.cache.SubscriptionAttributes; import org.apache.geode.internal.cache.GemFireCacheImpl; import org.junit.After; import org.junit.Test; import org.springframework.data.gemfire.test.support.AbstractRegionFactoryBeanTests; import org.springframework.data.gemfire.util.ArrayUtils; /** * The RegionFactoryBeanTest class is a test suite of test cases testing the contract and functionality of the * RegionFactoryBean class. * * @author David Turanski * @author John Blum * @see org.springframework.data.gemfire.RegionFactoryBean * @see org.apache.geode.cache.Cache * @see org.apache.geode.cache.DataPolicy * @see org.apache.geode.cache.PartitionAttributes * @see org.apache.geode.cache.Region * @see org.apache.geode.cache.RegionAttributes * @see org.apache.geode.cache.RegionFactory * @see org.apache.geode.cache.RegionShortcut */ @SuppressWarnings("unchecked") public class RegionFactoryBeanTest extends AbstractRegionFactoryBeanTests { private final RegionFactoryBean factoryBean = new TestRegionFactoryBean(); @After public void tearDown() { factoryBean.setDataPolicy((DataPolicy) null); factoryBean.setShortcut(null); } @SuppressWarnings("rawtypes") private RegionFactoryBeanConfig defaultConfig() { return new RegionFactoryBeanConfig(new TestRegionFactoryBean(), "default") { @Override public void configureRegionFactoryBean() { } @Override public void verify() { Region region = regionFactoryBean.getRegion(); assertEquals(DataPolicy.DEFAULT, region.getAttributes().getDataPolicy()); } }; } @SuppressWarnings("rawtypes") private RegionFactoryBeanConfig persistentConfig() { return new RegionFactoryBeanConfig(new TestRegionFactoryBean(), "persistent") { @Override public void configureRegionFactoryBean() { regionFactoryBean.setPersistent(true); } @Override public void verify() { Region region = regionFactoryBean.getRegion(); assertEquals(DataPolicy.PERSISTENT_REPLICATE, region.getAttributes().getDataPolicy()); } }; } @SuppressWarnings({ "deprecation", "rawtypes" }) private RegionFactoryBeanConfig invalidPersistentConfig() { return new RegionFactoryBeanConfig(new TestRegionFactoryBean(), "invalid-persistence") { @Override public void configureRegionFactoryBean() { regionFactoryBean.setDataPolicy("persistent_replicate"); regionFactoryBean.setPersistent(false); } @Override public void verify() { assertNotNull(this.exception); assertEquals("Data Policy 'PERSISTENT_REPLICATE' is invalid when persistent is false.", exception.getMessage()); } }; } @Override protected void createRegionFactoryBeanConfigs() { add(defaultConfig()); add(persistentConfig()); add(invalidPersistentConfig()); } protected PartitionAttributes createPartitionAttributes(final String colocatedWith, final int localMaxMemory, final long recoveryDelay, final int redundantCopies, final long startupRecoveryDelay, final long totalMaxMemory, final int totalNumberOfBuckets) throws Exception { PartitionAttributesFactoryBean partitionAttributesFactoryBean = new PartitionAttributesFactoryBean(); partitionAttributesFactoryBean.setColocatedWith(colocatedWith); partitionAttributesFactoryBean.setLocalMaxMemory(localMaxMemory); partitionAttributesFactoryBean.setRecoveryDelay(recoveryDelay); partitionAttributesFactoryBean.setRedundantCopies(redundantCopies); partitionAttributesFactoryBean.setStartupRecoveryDelay(startupRecoveryDelay); partitionAttributesFactoryBean.setTotalMaxMemory(totalMaxMemory); partitionAttributesFactoryBean.setTotalNumBuckets(totalNumberOfBuckets); partitionAttributesFactoryBean.afterPropertiesSet(); return partitionAttributesFactoryBean.getObject(); } protected RegionAttributes createMockRegionAttributes(final DataPolicy... dataPolicies) { RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); when(mockRegionAttributes.getDataPolicy()).thenReturn(ArrayUtils.getFirst(dataPolicies, DataPolicy.DEFAULT)); return mockRegionAttributes; } protected RegionFactory<?, ?> createMockRegionFactory() { return mock(RegionFactory.class); } protected RegionFactory<?, ?> createTestRegionFactory() { return new TestRegionFactory(); } @Test public void testAssertDataPolicyAndPersistentAttributesAreCompatible() { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); factoryBean.setPersistent(null); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PARTITION); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.REPLICATE); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PERSISTENT_PARTITION); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PERSISTENT_REPLICATE); factoryBean.setPersistent(false); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PARTITION); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.REPLICATE); factoryBean.setPersistent(true); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PERSISTENT_PARTITION); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PERSISTENT_REPLICATE); } @Test(expected = IllegalArgumentException.class) public void testAssertNonPersistentDataPolicyWithPersistentAttribute() { try { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); factoryBean.setPersistent(true); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.REPLICATE); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'REPLICATE' is invalid when persistent is true.", expected.getMessage()); throw expected; } } @Test(expected = IllegalArgumentException.class) public void testAssertPersistentDataPolicyWithNonPersistentAttribute() { try { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); factoryBean.setPersistent(false); factoryBean.assertDataPolicyAndPersistentAttributesAreCompatible(DataPolicy.PERSISTENT_PARTITION); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PERSISTENT_PARTITION' is invalid when persistent is false.", expected.getMessage()); throw expected; } } @Test public void testIsPersistent() { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); assertFalse(factoryBean.isPersistent()); factoryBean.setPersistent(false); assertFalse(factoryBean.isPersistent()); factoryBean.setPersistent(true); assertTrue(factoryBean.isPersistent()); } @Test public void testIsPersistentUnspecified() { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); assertTrue(factoryBean.isPersistentUnspecified()); factoryBean.setPersistent(false); assertFalse(factoryBean.isPersistentUnspecified()); factoryBean.setPersistent(true); assertFalse(factoryBean.isPersistentUnspecified()); factoryBean.setPersistent(null); assertTrue(factoryBean.isPersistentUnspecified()); } @Test public void testIsNotPersistent() { RegionFactoryBean<?, ?> factoryBean = new TestRegionFactoryBean<Object, Object>(); assertFalse(factoryBean.isNotPersistent()); factoryBean.setPersistent(true); assertFalse(factoryBean.isNotPersistent()); factoryBean.setPersistent(false); assertTrue(factoryBean.isNotPersistent()); } @Test public void testCreateRegionFactoryWithShortcut() { Cache mockCache = mock(Cache.class); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); final RegionFactory mockRegionFactory = createMockRegionFactory(); when(mockCache.createRegionFactory(eq(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW))) .thenReturn(mockRegionFactory); final AtomicBoolean setDataPolicyCalled = new AtomicBoolean(false); RegionFactoryBean factoryBean = new RegionFactoryBean() { @Override DataPolicy getDataPolicy(final RegionFactory regionFactory) { return DataPolicy.PERSISTENT_PARTITION; } @Override public void setDataPolicy(final DataPolicy dataPolicy) { assertEquals(DataPolicy.PERSISTENT_PARTITION, dataPolicy); super.setDataPolicy(dataPolicy); setDataPolicyCalled.set(true); } @Override protected RegionFactory mergeRegionAttributes(RegionFactory regionFactory, RegionAttributes regionAttributes) { return mockRegionFactory; } }; factoryBean.setAttributes(mockRegionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW); assertSame(mockRegionFactory, factoryBean.createRegionFactory(mockCache)); assertTrue(setDataPolicyCalled.get()); verify(mockCache, times(1)).createRegionFactory(eq(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW)); } @Test public void testCreateRegionFactoryWithAttributes() { Cache mockCache = mock(Cache.class); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createMockRegionFactory(); when(mockCache.createRegionFactory(eq(mockRegionAttributes))).thenReturn(mockRegionFactory); RegionFactoryBean factoryBean = new TestRegionFactoryBean(); factoryBean.setAttributes(mockRegionAttributes); factoryBean.setShortcut(null); assertSame(mockRegionFactory, factoryBean.createRegionFactory(mockCache)); verify(mockCache, times(1)).createRegionFactory(eq(mockRegionAttributes)); } @Test public void testCreateRegionFactory() { Cache mockCache = mock(Cache.class); RegionFactory mockRegionFactory = createMockRegionFactory(); when(mockCache.createRegionFactory()).thenReturn(mockRegionFactory); RegionFactoryBean factoryBean = new TestRegionFactoryBean(); factoryBean.setAttributes(null); factoryBean.setShortcut(null); assertSame(mockRegionFactory, factoryBean.createRegionFactory(mockCache)); verify(mockCache).createRegionFactory(); } @Test public void testMergeRegionAttributes() throws Exception { EvictionAttributes testEvictionAttributes = EvictionAttributes.createLRUEntryAttributes(); ExpirationAttributes testExpirationAttributes = new ExpirationAttributes(120, ExpirationAction.LOCAL_DESTROY); MembershipAttributes testMembershipAttributes = new MembershipAttributes(); PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 1024000, 15000l, 0, 45000l, 2048000000l, 97); SubscriptionAttributes testSubscriptionAttributes = new SubscriptionAttributes(); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory<Long, String> mockRegionFactory = (RegionFactory<Long, String>) createMockRegionFactory(); when(mockRegionAttributes.getCloningEnabled()).thenReturn(false); when(mockRegionAttributes.getConcurrencyChecksEnabled()).thenReturn(true); when(mockRegionAttributes.getConcurrencyLevel()).thenReturn(51); when(mockRegionAttributes.getCustomEntryIdleTimeout()).thenReturn(null); when(mockRegionAttributes.getCustomEntryTimeToLive()).thenReturn(null); when(mockRegionAttributes.isDiskSynchronous()).thenReturn(true); when(mockRegionAttributes.getEnableAsyncConflation()).thenReturn(false); when(mockRegionAttributes.getEnableSubscriptionConflation()).thenReturn(false); when(mockRegionAttributes.getEntryIdleTimeout()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getEntryTimeToLive()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getEvictionAttributes()).thenReturn(testEvictionAttributes); when(mockRegionAttributes.getIgnoreJTA()).thenReturn(false); when(mockRegionAttributes.getIndexMaintenanceSynchronous()).thenReturn(false); when(mockRegionAttributes.getInitialCapacity()).thenReturn(1024); when(mockRegionAttributes.getKeyConstraint()).thenReturn(Long.class); when(mockRegionAttributes.getLoadFactor()).thenReturn(0.90f); when(mockRegionAttributes.isLockGrantor()).thenReturn(true); when(mockRegionAttributes.getMembershipAttributes()).thenReturn(testMembershipAttributes); when(mockRegionAttributes.getMulticastEnabled()).thenReturn(false); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); when(mockRegionAttributes.getPoolName()).thenReturn("swimming"); when(mockRegionAttributes.getRegionIdleTimeout()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getRegionTimeToLive()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getStatisticsEnabled()).thenReturn(true); when(mockRegionAttributes.getSubscriptionAttributes()).thenReturn(testSubscriptionAttributes); RegionFactoryBean factoryBean = new RegionFactoryBean() { @Override boolean isUserSpecifiedEvictionAttributes(final RegionAttributes regionAttributes) { return true; } @Override void validateRegionAttributes(final RegionAttributes regionAttributes) { // no-op! } }; factoryBean.mergeRegionAttributes(mockRegionFactory, mockRegionAttributes); verify(mockRegionFactory).setCloningEnabled(eq(false)); verify(mockRegionFactory).setConcurrencyChecksEnabled(eq(true)); verify(mockRegionFactory).setConcurrencyLevel(eq(51)); verify(mockRegionFactory).setCustomEntryIdleTimeout(null); verify(mockRegionFactory).setCustomEntryTimeToLive(null); verify(mockRegionFactory).setDiskSynchronous(eq(true)); verify(mockRegionFactory).setEnableAsyncConflation(eq(false)); verify(mockRegionFactory).setEnableSubscriptionConflation(eq(false)); verify(mockRegionFactory).setEntryIdleTimeout(same(testExpirationAttributes)); verify(mockRegionFactory).setEntryTimeToLive(same(testExpirationAttributes)); verify(mockRegionFactory).setEvictionAttributes(same(testEvictionAttributes)); verify(mockRegionFactory).setIgnoreJTA(eq(false)); verify(mockRegionFactory).setIndexMaintenanceSynchronous(eq(false)); verify(mockRegionFactory).setInitialCapacity(eq(1024)); verify(mockRegionFactory).setKeyConstraint(Long.class); verify(mockRegionFactory).setLoadFactor(eq(0.90f)); verify(mockRegionFactory).setLockGrantor(eq(true)); verify(mockRegionFactory).setMembershipAttributes(same(testMembershipAttributes)); verify(mockRegionFactory).setMulticastEnabled(eq(false)); verify(mockRegionFactory).setPartitionAttributes(eq(testPartitionAttributes)); verify(mockRegionFactory).setPoolName(eq("swimming")); verify(mockRegionFactory).setRegionIdleTimeout(same(testExpirationAttributes)); verify(mockRegionFactory).setRegionTimeToLive(same(testExpirationAttributes)); verify(mockRegionFactory).setStatisticsEnabled(eq(true)); verify(mockRegionFactory).setSubscriptionAttributes(same(testSubscriptionAttributes)); } @Test public void testMergeRegionAttributesWithNull() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.mergeRegionAttributes(mockRegionFactory, null); verify(mockRegionFactory, never()).setCloningEnabled(false); verify(mockRegionFactory, never()).setConcurrencyChecksEnabled(true); verify(mockRegionFactory, never()).setConcurrencyLevel(2); verify(mockRegionFactory, never()).setCustomEntryIdleTimeout(any(CustomExpiry.class)); verify(mockRegionFactory, never()).setCustomEntryTimeToLive(any(CustomExpiry.class)); verify(mockRegionFactory, never()).setDiskSynchronous(true); verify(mockRegionFactory, never()).setEnableAsyncConflation(true); verify(mockRegionFactory, never()).setEnableSubscriptionConflation(false); verify(mockRegionFactory, never()).setEntryIdleTimeout(any(ExpirationAttributes.class)); verify(mockRegionFactory, never()).setEntryTimeToLive(any(ExpirationAttributes.class)); verify(mockRegionFactory, never()).setEvictionAttributes(any(EvictionAttributes.class)); verify(mockRegionFactory, never()).setIgnoreJTA(false); verify(mockRegionFactory, never()).setIndexMaintenanceSynchronous(false); verify(mockRegionFactory, never()).setInitialCapacity(51); verify(mockRegionFactory, never()).setKeyConstraint(any(Class.class)); verify(mockRegionFactory, never()).setLoadFactor(0.75f); verify(mockRegionFactory, never()).setLockGrantor(true); verify(mockRegionFactory, never()).setMembershipAttributes(any(MembershipAttributes.class)); verify(mockRegionFactory, never()).setMulticastEnabled(false); verify(mockRegionFactory, never()).setPartitionAttributes(any(PartitionAttributes.class)); verify(mockRegionFactory, never()).setPoolName(any(String.class)); verify(mockRegionFactory, never()).setRegionIdleTimeout(any(ExpirationAttributes.class)); verify(mockRegionFactory, never()).setRegionTimeToLive(any(ExpirationAttributes.class)); verify(mockRegionFactory, never()).setStatisticsEnabled(true); verify(mockRegionFactory, never()).setSubscriptionAttributes(any(SubscriptionAttributes.class)); verify(mockRegionFactory, never()).setValueConstraint(any(Class.class)); } @Test public void testPartialMergeRegionAttributes() { ExpirationAttributes testExpirationAttributes = new ExpirationAttributes(300, ExpirationAction.LOCAL_INVALIDATE); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory<Long, String> mockRegionFactory = (RegionFactory<Long, String>) createMockRegionFactory(); when(mockRegionAttributes.getCloningEnabled()).thenReturn(true); when(mockRegionAttributes.getConcurrencyChecksEnabled()).thenReturn(false); when(mockRegionAttributes.getConcurrencyLevel()).thenReturn(8); when(mockRegionAttributes.getCustomEntryIdleTimeout()).thenReturn(null); when(mockRegionAttributes.getCustomEntryTimeToLive()).thenReturn(null); when(mockRegionAttributes.isDiskSynchronous()).thenReturn(false); when(mockRegionAttributes.getEnableAsyncConflation()).thenReturn(true); when(mockRegionAttributes.getEnableSubscriptionConflation()).thenReturn(true); when(mockRegionAttributes.getEntryIdleTimeout()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getEntryTimeToLive()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getEvictionAttributes()).thenReturn(null); when(mockRegionAttributes.getIgnoreJTA()).thenReturn(true); when(mockRegionAttributes.getIndexMaintenanceSynchronous()).thenReturn(true); when(mockRegionAttributes.getInitialCapacity()).thenReturn(512); when(mockRegionAttributes.getKeyConstraint()).thenReturn(Long.class); when(mockRegionAttributes.getLoadFactor()).thenReturn(0.60f); when(mockRegionAttributes.isLockGrantor()).thenReturn(false); when(mockRegionAttributes.getMembershipAttributes()).thenReturn(null); when(mockRegionAttributes.getMulticastEnabled()).thenReturn(true); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(null); when(mockRegionAttributes.getPoolName()).thenReturn("swimming"); when(mockRegionAttributes.getRegionIdleTimeout()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getRegionTimeToLive()).thenReturn(testExpirationAttributes); when(mockRegionAttributes.getStatisticsEnabled()).thenReturn(true); when(mockRegionAttributes.getSubscriptionAttributes()).thenReturn(null); RegionFactoryBean factoryBean = new RegionFactoryBean() { @Override boolean isUserSpecifiedEvictionAttributes(final RegionAttributes regionAttributes) { return false; } @Override void validateRegionAttributes(final RegionAttributes regionAttributes) { // no-op! } }; factoryBean.mergeRegionAttributes(mockRegionFactory, mockRegionAttributes); verify(mockRegionFactory).setCloningEnabled(eq(true)); verify(mockRegionFactory).setConcurrencyChecksEnabled(eq(false)); verify(mockRegionFactory).setConcurrencyLevel(eq(8)); verify(mockRegionFactory).setCustomEntryIdleTimeout(null); verify(mockRegionFactory).setCustomEntryTimeToLive(null); verify(mockRegionFactory).setDiskSynchronous(eq(false)); verify(mockRegionFactory).setEnableAsyncConflation(eq(true)); verify(mockRegionFactory).setEnableSubscriptionConflation(eq(true)); verify(mockRegionFactory).setEntryIdleTimeout(same(testExpirationAttributes)); verify(mockRegionFactory).setEntryTimeToLive(same(testExpirationAttributes)); verify(mockRegionFactory, never()).setEvictionAttributes(any(EvictionAttributes.class)); verify(mockRegionFactory).setIgnoreJTA(eq(true)); verify(mockRegionFactory).setIndexMaintenanceSynchronous(eq(true)); verify(mockRegionFactory).setInitialCapacity(eq(512)); verify(mockRegionFactory).setKeyConstraint(Long.class); verify(mockRegionFactory).setLoadFactor(eq(0.60f)); verify(mockRegionFactory).setLockGrantor(eq(false)); verify(mockRegionFactory).setMembershipAttributes(null); verify(mockRegionFactory).setMulticastEnabled(eq(true)); verify(mockRegionFactory, never()).setPartitionAttributes(any(PartitionAttributes.class)); verify(mockRegionFactory).setPoolName(eq("swimming")); verify(mockRegionFactory).setRegionIdleTimeout(same(testExpirationAttributes)); verify(mockRegionFactory).setRegionTimeToLive(same(testExpirationAttributes)); verify(mockRegionFactory).setStatisticsEnabled(eq(true)); verify(mockRegionFactory).setSubscriptionAttributes(null); } @Test public void testMergePartitionAttributesWithPartitionRedundantProxy() throws Exception { PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 512000, 15000l, 0, 30000l, 1024000l, 51); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createTestRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION_PROXY_REDUNDANT); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); RegionAttributes regionAttributes = TestUtils.readField("regionAttributes", TestUtils.readField("attrsFactory", mockRegionFactory)); PartitionAttributes actualPartitionAttributes = regionAttributes.getPartitionAttributes(); assertNotNull(actualPartitionAttributes); assertNotSame(testPartitionAttributes, actualPartitionAttributes); assertEquals("TestRegion", actualPartitionAttributes.getColocatedWith()); assertEquals(0, actualPartitionAttributes.getLocalMaxMemory()); assertEquals(15000l, actualPartitionAttributes.getRecoveryDelay()); assertEquals(1, actualPartitionAttributes.getRedundantCopies()); assertEquals(30000l, actualPartitionAttributes.getStartupRecoveryDelay()); assertEquals(1024000l, actualPartitionAttributes.getTotalMaxMemory()); assertEquals(51, actualPartitionAttributes.getTotalNumBuckets()); verify(mockRegionAttributes, times(2)).getPartitionAttributes(); } @Test public void testMergePartitionAttributesWithPartitionRedundant() throws Exception { PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 512000, 15000l, 0, 30000l, 1024000l, 51); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createTestRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION_REDUNDANT); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); RegionAttributes regionAttributes = TestUtils.readField("regionAttributes", TestUtils.readField("attrsFactory", mockRegionFactory)); PartitionAttributes actualPartitionAttributes = regionAttributes.getPartitionAttributes(); assertNotNull(actualPartitionAttributes); assertNotSame(testPartitionAttributes, actualPartitionAttributes); assertEquals("TestRegion", actualPartitionAttributes.getColocatedWith()); assertEquals(512000, actualPartitionAttributes.getLocalMaxMemory()); assertEquals(15000l, actualPartitionAttributes.getRecoveryDelay()); assertEquals(1, actualPartitionAttributes.getRedundantCopies()); assertEquals(30000l, actualPartitionAttributes.getStartupRecoveryDelay()); assertEquals(1024000l, actualPartitionAttributes.getTotalMaxMemory()); assertEquals(51, actualPartitionAttributes.getTotalNumBuckets()); verify(mockRegionAttributes, times(2)).getPartitionAttributes(); } @Test public void testMergePartitionAttributesWithPartitionRedundantPersistentOverflow() throws Exception { PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 512000, 15000l, 3, 30000l, 1024000l, 51); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createTestRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); RegionAttributes regionAttributes = TestUtils.readField("regionAttributes", TestUtils.readField("attrsFactory", mockRegionFactory)); PartitionAttributes actualPartitionAttributes = regionAttributes.getPartitionAttributes(); assertNotNull(actualPartitionAttributes); assertNotSame(testPartitionAttributes, actualPartitionAttributes); assertEquals("TestRegion", actualPartitionAttributes.getColocatedWith()); assertEquals(512000, actualPartitionAttributes.getLocalMaxMemory()); assertEquals(15000l, actualPartitionAttributes.getRecoveryDelay()); assertEquals(3, actualPartitionAttributes.getRedundantCopies()); assertEquals(30000l, actualPartitionAttributes.getStartupRecoveryDelay()); assertEquals(1024000l, actualPartitionAttributes.getTotalMaxMemory()); assertEquals(51, actualPartitionAttributes.getTotalNumBuckets()); verify(mockRegionAttributes, times(2)).getPartitionAttributes(); } @Test public void testMergePartitionAttributesWithPartitionProxy() throws Exception { PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 512000, 15000l, 0, 30000l, 1024000l, 51); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createTestRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION_PROXY); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); RegionAttributes regionAttributes = TestUtils.readField("regionAttributes", TestUtils.readField("attrsFactory", mockRegionFactory)); PartitionAttributes actualPartitionAttributes = regionAttributes.getPartitionAttributes(); assertNotNull(actualPartitionAttributes); assertNotSame(testPartitionAttributes, actualPartitionAttributes); assertEquals("TestRegion", actualPartitionAttributes.getColocatedWith()); assertEquals(0, actualPartitionAttributes.getLocalMaxMemory()); assertEquals(15000l, actualPartitionAttributes.getRecoveryDelay()); assertEquals(0, actualPartitionAttributes.getRedundantCopies()); assertEquals(30000l, actualPartitionAttributes.getStartupRecoveryDelay()); assertEquals(1024000l, actualPartitionAttributes.getTotalMaxMemory()); assertEquals(51, actualPartitionAttributes.getTotalNumBuckets()); verify(mockRegionAttributes, times(2)).getPartitionAttributes(); } @Test public void testMergePartitionAttributesWithPartition() throws Exception { PartitionAttributes testPartitionAttributes = createPartitionAttributes("TestRegion", 512000, 15000l, 0, 30000l, 1024000l, 51); RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createTestRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(testPartitionAttributes); factoryBean.setShortcut(RegionShortcut.PARTITION); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); RegionAttributes regionAttributes = TestUtils.readField("regionAttributes", TestUtils.readField("attrsFactory", mockRegionFactory)); PartitionAttributes actualPartitionAttributes = regionAttributes.getPartitionAttributes(); assertNotNull(actualPartitionAttributes); assertNotSame(testPartitionAttributes, actualPartitionAttributes); assertEquals("TestRegion", actualPartitionAttributes.getColocatedWith()); assertEquals(512000, actualPartitionAttributes.getLocalMaxMemory()); assertEquals(15000l, actualPartitionAttributes.getRecoveryDelay()); assertEquals(0, actualPartitionAttributes.getRedundantCopies()); assertEquals(30000l, actualPartitionAttributes.getStartupRecoveryDelay()); assertEquals(1024000l, actualPartitionAttributes.getTotalMaxMemory()); assertEquals(51, actualPartitionAttributes.getTotalNumBuckets()); verify(mockRegionAttributes, times(2)).getPartitionAttributes(); } @Test public void testMergePartitionAttributes() { RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); RegionFactory mockRegionFactory = createMockRegionFactory(); when(mockRegionAttributes.getPartitionAttributes()).thenReturn(null); factoryBean.setShortcut(null); factoryBean.mergePartitionAttributes(mockRegionFactory, mockRegionAttributes); verify(mockRegionAttributes, times(1)).getPartitionAttributes(); verify(mockRegionFactory, never()).setPartitionAttributes(any(PartitionAttributes.class)); } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndDataPolicyUnspecified() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, (String) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.DEFAULT)); } @Test public void testResolveDataPolicyWhenNotPersistentAndDataPolicyUnspecified() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, (String) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.DEFAULT)); } @Test public void testResolveDataPolicyWhenPersistentAndDataPolicyUnspecified() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, (String) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWithBlankDataPolicyName() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, " "); } catch (IllegalArgumentException expected) { assertEquals("Data Policy ' ' is invalid.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWithEmptyDataPolicyName() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, ""); } catch (IllegalArgumentException expected) { assertEquals("Data Policy '' is invalid.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWithInvalidDataPolicyName() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, "CSV"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'CSV' is invalid.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndNormalDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, "NORMAL"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.NORMAL)); } @Test public void testResolveDataPolicyWhenNotPersistentAndPreloadedDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, "PRELOADED"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PRELOADED)); } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenPersistentAndEmptyDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, "EMPTY"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'EMPTY' is invalid when persistent is true.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.EMPTY)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, "PARTITION"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PARTITION)); } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndPersistentPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, "PERSISTENT_PARTITION"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenNotPersistentAndPersistentPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, "PERSISTENT_PARTITION"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PERSISTENT_PARTITION' is invalid when persistent is false.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenPersistentAndPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, "PARTITION"); fail( "Setting the 'persistent' attribute to TRUE and 'Data Policy' to PARTITION should have thrown an IllegalArgumentException!"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PARTITION' is invalid when persistent is true.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PARTITION)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test public void testResolveDataPolicyWhenNotPersistentAndPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, "PARTITION"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PARTITION)); } @Test public void testResolveDataPolicyWhenPersistentAndPersistentPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, "PERSISTENT_PARTITION"); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndRegionAttributesPreloadedDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes(DataPolicy.PRELOADED)); factoryBean.setDataPolicy((DataPolicy) null); factoryBean.resolveDataPolicy(mockRegionFactory, null, (String) null); verify(mockRegionFactory, times(1)).setDataPolicy(eq(DataPolicy.PRELOADED)); assertEquals(DataPolicy.PRELOADED, factoryBean.getDataPolicy()); } @Test public void testResolveDataPolicyWhenNotPersistentAndRegionAttributesPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes(DataPolicy.PARTITION)); factoryBean.setDataPolicy((DataPolicy) null); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, (String) null); verify(mockRegionFactory, times(1)).setDataPolicy(eq(DataPolicy.PARTITION)); assertEquals(DataPolicy.PARTITION, factoryBean.getDataPolicy()); } @Test public void testResolveDataPolicyWhenPersistentAndRegionAttributesPersistentPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes(DataPolicy.PERSISTENT_PARTITION)); factoryBean.setDataPolicy((DataPolicy) null); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, (String) null); verify(mockRegionFactory, times(1)).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); assertEquals(DataPolicy.PERSISTENT_PARTITION, factoryBean.getDataPolicy()); } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenNotPersistentAndRegionAttributesPersistentPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setAttributes(createMockRegionAttributes(DataPolicy.PERSISTENT_PARTITION)); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, (String) null); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PERSISTENT_PARTITION' is invalid when persistent is false.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_PARTITION)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenPersistentAndRegionAttributesPartitionDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setAttributes(createMockRegionAttributes(DataPolicy.PARTITION)); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, (String) null); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PARTITION' is invalid when persistent is true.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PARTITION)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndUnspecifiedDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes()); factoryBean.setPersistent(null); factoryBean.resolveDataPolicy(mockRegionFactory, null, (DataPolicy) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.DEFAULT)); } @Test public void testResolveDataPolicyWhenNotPersistentAndUnspecifiedDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes()); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, (DataPolicy) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.DEFAULT)); } @Test public void testResolveDataPolicyWhenPersistentAndUnspecifiedDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setAttributes(createMockRegionAttributes()); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, (DataPolicy) null); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, DataPolicy.REPLICATE); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.REPLICATE)); } @Test public void testResolveDataPolicyWhenPersistentUnspecifiedAndPersistentReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.resolveDataPolicy(mockRegionFactory, null, DataPolicy.PERSISTENT_REPLICATE); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenNotPersistentAndPersistentReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, DataPolicy.PERSISTENT_REPLICATE); fail("Setting the 'persistent' attribute to FALSE and 'Data Policy' to PERSISTENT_REPLICATE should have thrown an IllegalArgumentException!"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'PERSISTENT_REPLICATE' is invalid when persistent is false.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.REPLICATE)); } } @Test(expected = IllegalArgumentException.class) public void testResolveDataPolicyWhenPersistentAndReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); try { factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, "REPLICATE"); fail("Setting the 'persistent' attribute to TRUE and 'Data Policy' to REPLICATE should have thrown an IllegalArgumentException!"); } catch (IllegalArgumentException expected) { assertEquals("Data Policy 'REPLICATE' is invalid when persistent is true.", expected.getMessage()); throw expected; } finally { verify(mockRegionFactory, never()).setDataPolicy(null); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.DEFAULT)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); verify(mockRegionFactory, never()).setDataPolicy(eq(DataPolicy.REPLICATE)); } } @Test public void testResolveDataPolicyWhenNotPersistentAndReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(false); factoryBean.resolveDataPolicy(mockRegionFactory, false, DataPolicy.REPLICATE); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.REPLICATE)); } @Test public void testResolveDataPolicyWhenPersistentAndPersistentReplicateDataPolicy() { RegionFactory mockRegionFactory = createMockRegionFactory(); factoryBean.setPersistent(true); factoryBean.resolveDataPolicy(mockRegionFactory, true, DataPolicy.PERSISTENT_REPLICATE); verify(mockRegionFactory).setDataPolicy(eq(DataPolicy.PERSISTENT_REPLICATE)); } protected static class TestRegionFactory extends RegionFactory { protected TestRegionFactory() { super((GemFireCacheImpl) null); } } protected static class TestRegionFactoryBean<K, V> extends RegionFactoryBean<K, V> { } }