Additional work and changes for JIRA feature requests SGF-207 and SGF-254 to enable developers with the ability to create Region templates to model attributes and configuration meta-data common to multiple, strongly-typed GemFire Region types (e.g. REPLICATE, PARTITION, etc).

This commit is contained in:
John Blum
2014-08-22 13:11:30 -07:00
committed by John Blum
parent 5d27c19ef5
commit 2f66eca99b
5 changed files with 209 additions and 32 deletions

View File

@@ -19,11 +19,11 @@ package org.springframework.data.gemfire.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
@@ -33,18 +33,24 @@ import org.springframework.beans.factory.BeanIsAbstractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer;
import org.springframework.data.gemfire.test.support.CollectionUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.ObjectUtils;
import com.gemstone.gemfire.cache.CacheLoader;
import com.gemstone.gemfire.cache.CacheLoaderException;
import com.gemstone.gemfire.cache.DataPolicy;
import com.gemstone.gemfire.cache.EntryOperation;
import com.gemstone.gemfire.cache.EvictionAction;
import com.gemstone.gemfire.cache.EvictionAlgorithm;
import com.gemstone.gemfire.cache.EvictionAttributes;
import com.gemstone.gemfire.cache.InterestPolicy;
import com.gemstone.gemfire.cache.LoaderHelper;
import com.gemstone.gemfire.cache.PartitionResolver;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.RegionAttributes;
import com.gemstone.gemfire.cache.Scope;
import com.gemstone.gemfire.cache.SubscriptionAttributes;
import com.gemstone.gemfire.cache.asyncqueue.AsyncEvent;
import com.gemstone.gemfire.cache.asyncqueue.AsyncEventListener;
import com.gemstone.gemfire.cache.partition.PartitionListenerAdapter;
@@ -73,6 +79,25 @@ public class TemplateRegionsNamespaceTests {
@Resource(name = "SimpleReplicateRegion")
private Region<Integer, String> simpleReplicateRegion;
@Resource(name = "InheritedReplicateRegion")
private Region<Long, String> inheritedReplicateRegion;
@Resource(name = "ComplexReplicateRegion")
private Region complexReplicateRegion;
protected static void assertRegionMetaData(final Region<?, ?> region, final String expectedRegionName) {
assertRegionMetaData(region, expectedRegionName, Region.SEPARATOR + expectedRegionName);
}
protected static void assertRegionMetaData(final Region<?, ?> region, final String expectedRegionName, final String expectedRegionPath) {
assertNotNull(String.format("The '%1$s' Region was not properly configured and initialized!",
expectedRegionName), region);
assertEquals(expectedRegionName, region.getName());
assertEquals(expectedRegionPath, region.getFullPath());
assertNotNull(String.format("The '%1$s' Region must have RegionAttributes defined!",
expectedRegionName), region.getAttributes());
}
@SuppressWarnings("deprecation")
protected static <K, V> void assertBaseRegionAttributes(final Region<K, V> region) {
assertNotNull("The Region must not be null!", region);
@@ -100,6 +125,25 @@ public class TemplateRegionsNamespaceTests {
assertEquals("Y", regionAttributes.getCacheWriter().toString());
}
protected static <K, V> void assertBaseReplicateRegionAttributes(final Region<K, V> replicateRegion) {
assertBaseRegionAttributes(replicateRegion);
assertEquals(2, replicateRegion.getAttributes().getConcurrencyLevel());
assertTrue(replicateRegion.getAttributes().getEnableAsyncConflation());
assertTrue(replicateRegion.getAttributes().getEnableSubscriptionConflation());
EvictionAttributes evictionAttributes = replicateRegion.getAttributes().getEvictionAttributes();
assertNotNull(evictionAttributes);
assertEquals(EvictionAction.OVERFLOW_TO_DISK, evictionAttributes.getAction());
assertEquals(EvictionAlgorithm.LRU_ENTRY, evictionAttributes.getAlgorithm());
assertEquals(1000, evictionAttributes.getMaximum());
SubscriptionAttributes subscriptionAttributes = replicateRegion.getAttributes().getSubscriptionAttributes();
assertNotNull(subscriptionAttributes);
assertEquals(InterestPolicy.CACHE_CONTENT, subscriptionAttributes.getInterestPolicy());
}
@Test
public void testNoAbstractRegionTemplateBeans() {
String[] beanNames = {
@@ -124,7 +168,66 @@ public class TemplateRegionsNamespaceTests {
@Test
public void testSimpleReplicateRegion() {
fail("Not Implemented!");
assertRegionMetaData(simpleReplicateRegion, "SimpleReplicateRegion");
assertEquals(DataPolicy.PERSISTENT_REPLICATE, simpleReplicateRegion.getAttributes().getDataPolicy());
assertEquals(8, simpleReplicateRegion.getAttributes().getConcurrencyLevel());
assertEquals(Integer.class, simpleReplicateRegion.getAttributes().getKeyConstraint());
assertTrue(simpleReplicateRegion.getAttributes().isLockGrantor());
assertEquals(Scope.GLOBAL, simpleReplicateRegion.getAttributes().getScope());
assertNull(simpleReplicateRegion.getAttributes().getValueConstraint());
assertNotNull(simpleReplicateRegion.getAttributes().getCacheListeners());
assertEquals(1, simpleReplicateRegion.getAttributes().getCacheListeners().length);
assertTrue(simpleReplicateRegion.getAttributes().getCacheListeners()[0] instanceof TestCacheListener);
assertEquals("Simple", simpleReplicateRegion.getAttributes().getCacheListeners()[0].toString());
assertNull(simpleReplicateRegion.getAttributes().getCacheLoader());
assertNull(simpleReplicateRegion.getAttributes().getCacheWriter());
}
@Test
public void testInheritedReplicateRegion() {
assertRegionMetaData(inheritedReplicateRegion, "InheritedReplicateRegion");
assertEquals(Scope.DISTRIBUTED_ACK, inheritedReplicateRegion.getAttributes().getScope());
assertBaseReplicateRegionAttributes(inheritedReplicateRegion);
}
@Test
@SuppressWarnings("deprecation")
public void testComplexReplicateRegion() {
assertRegionMetaData(complexReplicateRegion, "ComplexReplicateRegion");
assertEquals(DataPolicy.PERSISTENT_REPLICATE, complexReplicateRegion.getAttributes().getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, complexReplicateRegion.getAttributes().getScope());
assertFalse(complexReplicateRegion.getAttributes().getCloningEnabled());
assertEquals(2, complexReplicateRegion.getAttributes().getConcurrencyLevel());
assertTrue(complexReplicateRegion.getAttributes().isDiskSynchronous());
assertFalse(complexReplicateRegion.getAttributes().getEnableAsyncConflation());
assertTrue(complexReplicateRegion.getAttributes().getEnableSubscriptionConflation());
assertFalse(complexReplicateRegion.getAttributes().getIgnoreJTA());
assertEquals(1000, complexReplicateRegion.getAttributes().getInitialCapacity());
assertEquals(Integer.class, complexReplicateRegion.getAttributes().getKeyConstraint());
assertEquals(0.90f, complexReplicateRegion.getAttributes().getLoadFactor());
assertTrue(complexReplicateRegion.getAttributes().getStatisticsEnabled());
assertTrue(complexReplicateRegion.getAttributes().getIndexMaintenanceSynchronous());
assertEquals(String.class, complexReplicateRegion.getAttributes().getValueConstraint());
assertNotNull(complexReplicateRegion.getAttributes().getCacheListeners());
assertEquals(1, complexReplicateRegion.getAttributes().getCacheListeners().length);
assertTrue(complexReplicateRegion.getAttributes().getCacheListeners()[0] instanceof TestCacheListener);
assertEquals("ComplexListener", complexReplicateRegion.getAttributes().getCacheListeners()[0].toString());
assertNotNull(complexReplicateRegion.getAttributes().getCacheLoader());
assertEquals("ComplexLoader", complexReplicateRegion.getAttributes().getCacheLoader().toString());
assertNotNull(complexReplicateRegion.getAttributes().getCacheWriter());
assertEquals("Y", complexReplicateRegion.getAttributes().getCacheWriter().toString());
EvictionAttributes evictionAttributes = complexReplicateRegion.getAttributes().getEvictionAttributes();
assertNotNull(evictionAttributes);
assertEquals(EvictionAction.OVERFLOW_TO_DISK, evictionAttributes.getAction());
assertEquals(EvictionAlgorithm.LRU_ENTRY, evictionAttributes.getAlgorithm());
assertEquals(1024, evictionAttributes.getMaximum());
SubscriptionAttributes subscriptionAttributes = complexReplicateRegion.getAttributes().getSubscriptionAttributes();
assertNotNull(subscriptionAttributes);
assertEquals(InterestPolicy.ALL, subscriptionAttributes.getInterestPolicy());
}
protected static interface Nameable {