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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user