blob: 151e9c8a5695708e980e4d9cb11b07635f0f7baf [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.cache;
import static com.gemstone.gemfire.cache.RegionShortcut.*;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Properties;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TestName;
import com.gemstone.gemfire.CancelException;
import com.gemstone.gemfire.cache.client.PoolManager;
import com.gemstone.gemfire.cache.util.CacheListenerAdapter;
import com.gemstone.gemfire.cache.util.CacheWriterAdapter;
import com.gemstone.gemfire.distributed.DistributedSystem;
import com.gemstone.gemfire.distributed.internal.DistributionConfig;
import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
import com.gemstone.gemfire.internal.cache.LocalRegion;
import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
/**
* Unit test for the RegionFactory class
* @author Mitch Thomas
* @since 5.0
*/
@Category(IntegrationTest.class)
public class RegionFactoryJUnitTest {
@Rule
public TestName testName = new TestName();
private final String key = "key";
private final Integer val = new Integer(1);
private final String r1Name = "r1";
private final String r2Name = "r2";
private final String r3Name = "r3";
private final String r1sr1Name = "sr1";
private Cache cache = null;
private DistributedSystem distSys = null;
private Region r1;
private Region r2;
private Region r3;
private Region r1sr1;
@After
public void tearDown() throws Exception {
try {
if (this.r1 != null) {
cleanUpRegion(this.r1);
}
if (this.r2 != null) {
cleanUpRegion(this.r2);
}
if (this.r3 != null) {
cleanUpRegion(this.r3);
}
if (this.r1sr1 != null) {
cleanUpRegion(this.r1sr1);
}
Cache c = this.cache;
DistributedSystem d = this.distSys;
if (c != null && !c.isClosed()) {
d = c.getDistributedSystem();
c.close();
}
if (d != null && d.isConnected()) {
d.disconnect();
}
} finally {
this.r1 = null;
this.r2 = null;
this.r3 = null;
this.r1sr1 = null;
this.cache = null;
this.distSys = null;
}
}
/**
* Tests create, destroy and recreate Region
*/
@Test
public void testCreateDestroyCreateRegions() throws Exception {
// Assert basic region creation when no DistributedSystem or Cache exists
RegionFactory factory = new RegionFactory(createGemFireProperties());
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
// Assert duplicate creation failure
try {
factory.create(r1Name);
fail("Expected RegionExistsException");
}
catch (RegionExistsException expected) {
}
r1sr1 = factory.createSubregion(r1, r1sr1Name);
assertBasicRegionFunctionality(r1sr1, r1sr1Name);
try {
factory.createSubregion(r1, r1sr1Name);
fail("Expected RegionExistsException");
}
catch (RegionExistsException expected) {
}
r1sr1.destroyRegion();
r2 = factory.create(r2Name);
assertBasicRegionFunctionality(r2, r2Name);
r2.destroyRegion();
try {
factory.createSubregion(r2, "shouldNotBePossible");
fail("Expected a RegionDestroyedException");
} catch (RegionDestroyedException expected) {
}
r1.destroyRegion();
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
r1.destroyRegion();
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
r1.destroyRegion();
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
}
/**
* Test RegionFactory with Cache close and DistributedSystem disconnect
*/
@Test
public void testRegionFactoryAndCacheClose() throws Exception {
// Assert basic region creation when no DistributedSystem or Cache exists
RegionFactory factory = new RegionFactory(createGemFireProperties());
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
// Assert duplicate creation failure
try {
factory.create(r1Name);
fail("Expected RegionExistsException");
}
catch (RegionExistsException expected) {
}
r2 = factory.create(r2Name);
assertBasicRegionFunctionality(r2, r2Name);
r2.destroyRegion();
// as of 6.5 if the cache that was used to create a regionFactory is closed
// then the factory is out of business
Cache c = r1.getCache();
r1.destroyRegion();
c.close();
try {
r1 = factory.create(r1Name);
fail("Use of RegionFactory after cache close should throw CancelException");
} catch (CancelException expected) {
// passed
}
factory = new RegionFactory(createGemFireProperties());
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
// as of 6.5 if the ds that was used to create a regionFactory is disconnected
// then the factory is out of business
// Assert we can handle a disconnected disributed system
DistributedSystem d = r1.getCache().getDistributedSystem();
r1.destroyRegion();
d.disconnect();
try {
r1 = factory.create(r1Name);
} catch (CancelException expected) {
// passed
}
factory = new RegionFactory(createGemFireProperties());
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
// as of 6.5 if the ds that was used to create a regionFactory is disconnected
// then the factory is out of business
// Assert we can handle both a closed Cache and a disconnected system
c = r1.getCache();
d = c.getDistributedSystem();
r1.destroyRegion();
c.close();
d.disconnect();
r1 = new RegionFactory(createGemFireProperties()).create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
}
@Test
public void testAfterConnect() throws Exception {
// Assert basic region creation when a Distributed system exists
this.distSys = DistributedSystem.connect(createGemFireProperties()); // for teardown
RegionFactory factory = new RegionFactory();
r1 = factory.create(r1Name);
this.cache = r1.getCache(); // for teardown
assertBasicRegionFunctionality(r1, r1Name);
}
@Test
public void testAfterConnectWithDifferentProperties() throws Exception {
// Assert failure when a Distributed system exists but with different properties
this.distSys = DistributedSystem.connect(createGemFireProperties()); // for teardown
final Properties failed = new Properties();
failed.put("mcast-ttl", "64");
try {
new RegionFactory(failed);
fail("Expected exception");
} catch (IllegalStateException expected) {
// passed
}
}
@Test
public void testAfterCacheCreate() throws Exception {
// Assert basic region creation when a Distributed and Cache exist
DistributedSystem ds = DistributedSystem.connect(createGemFireProperties());
CacheFactory.create(ds);
RegionFactory factory = new RegionFactory();
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
}
@Test
public void testAfterCacheClosed() throws Exception {
// Assert basic region creation when a Distributed and Cache exist but the cache is closed
Properties gemfireProps = createGemFireProperties();
DistributedSystem ds = DistributedSystem.connect(gemfireProps);
this.cache = CacheFactory.create(ds);
this.cache.close();
RegionFactory factory = new RegionFactory(gemfireProps);
r1 = factory.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
}
/**
* Test method for
* 'com.gemstone.gemfire.cache.RegionFactory.RegionFactory(RegionAttributes)'
*/
@Test
public void testRegionFactoryRegionAttributes() throws Exception {
Properties gemfireProps = createGemFireProperties();
r1 = new RegionFactory(gemfireProps)
.setScope(Scope.LOCAL)
.setConcurrencyLevel(1)
.setLoadFactor(0.8F)
.setKeyConstraint(String.class)
.setStatisticsEnabled(true)
.create(r1Name);
assertBasicRegionFunctionality(r1, r1Name);
final RegionFactory factory = new RegionFactory(gemfireProps, r1.getAttributes());
r2 = factory.create(r2Name);
assertBasicRegionFunctionality(r2, r2Name);
assertRegionAttributes(r1.getAttributes(), r2.getAttributes());
r3 = factory.create(r3Name);
assertRegionAttributes(r2.getAttributes(), r3.getAttributes());
}
/**
* Test method for
* 'com.gemstone.gemfire.cache.RegionFactory.RegionFactory(String)'
*/
@Test
public void testRegionFactoryString() throws Exception {
// TODO: create subdir using getName() and create cache.xml there instead of using DEFAULT_CACHE_XML_FILE
DistributionConfig.DEFAULT_CACHE_XML_FILE.delete();
try {
DistributionConfig.DEFAULT_CACHE_XML_FILE.createNewFile();
FileWriter f = new FileWriter(DistributionConfig.DEFAULT_CACHE_XML_FILE);
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n"
+ "<!DOCTYPE cache PUBLIC\n \"-//GemStone Systems, Inc.//GemFire Declarative Caching 6.5//EN\"\n"
+ " \"http://www.gemstone.com/dtd/cache6_5.dtd\">\n"
+ "<cache>\n"
+ " <region-attributes id=\""
+ getName()
+ "\" statistics-enabled=\"true\" scope=\"distributed-ack\">\n"
+ " <key-constraint>"
+ String.class.getName()
+ "</key-constraint>\n"
+ " <value-constraint>"
+ Integer.class.getName()
+ "</value-constraint>\n"
+ " <entry-idle-time><expiration-attributes timeout=\"60\"/></entry-idle-time>\n"
+ " </region-attributes>\n" + "</cache>");
f.close();
RegionFactory factory = new RegionFactory(createGemFireProperties(), getName());
r1 = factory.create(this.r1Name);
assertBasicRegionFunctionality(r1, r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ra.getStatisticsEnabled(), true);
assertEquals(ra.getScope().isDistributedAck(), true);
assertEquals(ra.getValueConstraint(), Integer.class);
assertEquals(ra.getKeyConstraint(), String.class);
assertEquals(ra.getEntryIdleTimeout().getTimeout(), 60);
}
finally {
DistributionConfig.DEFAULT_CACHE_XML_FILE.delete();
}
}
/**
* Test method for
* 'com.gemstone.gemfire.cache.RegionFactory.RegionFactory(Properties)'
*/
@Test
public void testRegionFactoryProperties() throws Exception {
final Properties gemfireProperties = createGemFireProperties();
gemfireProperties.put("mcast-ttl", "64");
RegionFactory factory = new RegionFactory(gemfireProperties);
r1 = factory.create(this.r1Name);
assertBasicRegionFunctionality(r1, r1Name);
assertEquals(gemfireProperties.get("mcast-ttl"), r1.getCache().getDistributedSystem().getProperties().get("mcast-ttl"));
}
/**
* Test method for
* 'com.gemstone.gemfire.cache.RegionFactory.RegionFactory(Properties,
* RegionAttributes)'
*/
@Ignore
@Test
public void testRegionFactoryPropertiesRegionAttributes() {
// TODO: implement test
}
/**
* Test method for
* 'com.gemstone.gemfire.cache.RegionFactory.RegionFactory(Properties,
* String)'
*/
@Test
public void testRegionFactoryPropertiesString() throws Exception {
File xmlFile = null;
try {
final Properties gemfireProperties = createGemFireProperties();
gemfireProperties.put("mcast-ttl", "64");
final String xmlFileName = getName() + "-cache.xml";
gemfireProperties.put("cache-xml-file", xmlFileName);
xmlFile = new File(xmlFileName);
xmlFile.delete();
xmlFile.createNewFile();
FileWriter f = new FileWriter(xmlFile);
final String attrsId = getName() + "-attrsId";
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n"
+ "<!DOCTYPE cache PUBLIC\n \"-//GemStone Systems, Inc.//GemFire Declarative Caching 6.5//EN\"\n"
+ " \"http://www.gemstone.com/dtd/cache6_5.dtd\">\n"
+ "<cache>\n"
+ " <region-attributes id=\""
+ attrsId
+ "\" statistics-enabled=\"true\" scope=\"distributed-ack\">\n"
+ " <key-constraint>"
+ String.class.getName()
+ "</key-constraint>\n"
+ " <value-constraint>"
+ Integer.class.getName()
+ "</value-constraint>\n"
+ " <entry-idle-time><expiration-attributes timeout=\"60\"/></entry-idle-time>\n"
+ " </region-attributes>\n" + "</cache>");
f.close();
RegionFactory factory = new RegionFactory(gemfireProperties, attrsId);
r1 = factory.create(this.r1Name);
assertBasicRegionFunctionality(r1, r1Name);
assertEquals(gemfireProperties.get("mcast-ttl"), r1.getCache().getDistributedSystem().getProperties().get("mcast-ttl"));
assertEquals(gemfireProperties.get("cache-xml-file"), r1.getCache().getDistributedSystem().getProperties().get("cache-xml-file"));
RegionAttributes ra = r1.getAttributes();
assertEquals(ra.getStatisticsEnabled(), true);
assertEquals(ra.getScope().isDistributedAck(), true);
assertEquals(ra.getValueConstraint(), Integer.class);
assertEquals(ra.getKeyConstraint(), String.class);
assertEquals(ra.getEntryIdleTimeout().getTimeout(), 60);
} finally {
if (xmlFile != null) {
xmlFile.delete();
}
}
}
/**
* Ensure that the RegionFactory set methods mirrors those found in RegionAttributes
*
* @throws Exception
*/
@Test
public void testAttributesFactoryConformance() throws Exception {
Method[] af = AttributesFactory.class.getDeclaredMethods();
Method[] rf = RegionFactory.class.getDeclaredMethods();
Method am, rm;
ArrayList afDeprected = new ArrayList(); // hack to ignore deprecated methods
afDeprected.add("setCacheListener");
afDeprected.add("setMirrorType");
afDeprected.add("setPersistBackup");
afDeprected.add("setBucketRegion");
afDeprected.add("setEnableWAN");
afDeprected.add("setEnableBridgeConflation");
afDeprected.add("setEnableConflation");
ArrayList methodsToImplement = new ArrayList();
// Since the RegionFactory has an AttributesFactory member,
// we only need to make sure the RegionFactory class adds proxies for the
// 'set' and 'add' methods added to the AttributesFactory. The java complier
// will notify the
// developer if a method is removed from AttributesFactory.
String amName;
boolean hasMethod = false;
assertTrue(af.length != 0);
for (int i=0; i<af.length; i++) {
am = af[i];
amName = am.getName();
if (!afDeprected.contains(amName) &&
(amName.startsWith("set") || amName.startsWith("add"))) {
for (int j=0; j<rf.length; j++) {
rm = rf[j];
if (rm.getName().equals(am.getName())) {
Class[] rparams = rm.getParameterTypes();
Class[] aparams = am.getParameterTypes();
if (rparams.length == aparams.length) {
boolean hasAllParams = true;
for (int k = 0; k < rparams.length; k++) {
if (aparams[k] != rparams[k]) {
hasAllParams = false;
break;
}
} // parameter check
if (hasAllParams) {
hasMethod = true;
}
}
}
} // region factory methods
if (!hasMethod) {
methodsToImplement.add(am);
} else {
hasMethod = false;
}
}
} // attributes methods
if (methodsToImplement.size() > 0) {
fail("RegionFactory does not conform to AttributesFactory, its should proxy these methods " + methodsToImplement);
}
}
@Test
public void testPARTITION() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
}
@Test
public void testPARTITION_REDUNDANT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
}
@Test
public void testPARTITION_PERSISTENT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_PERSISTENT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
}
@Test
public void testPARTITION_REDUNDANT_PERSISTENT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT_PERSISTENT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
}
@Test
public void testPARTITION_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_REDUNDANT_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_PERSISTENT_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_PERSISTENT_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_REDUNDANT_PERSISTENT_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT_PERSISTENT_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_HEAP_LRU() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_HEAP_LRU);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_REDUNDANT_HEAP_LRU() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT_HEAP_LRU);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(EvictionAttributes.createLRUHeapAttributes(), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testREPLICATE() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.REPLICATE, ra.getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
}
@Test
public void testREPLICATE_PERSISTENT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PERSISTENT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_REPLICATE, ra.getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
}
@Test
public void testREPLICATE_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.REPLICATE, ra.getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testREPLICATE_PERSISTENT_OVERFLOW() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PERSISTENT_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_REPLICATE, ra.getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testREPLICATE_HEAP_LRU() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_HEAP_LRU);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PRELOADED, ra.getDataPolicy());
assertEquals(new SubscriptionAttributes(InterestPolicy.ALL),
ra.getSubscriptionAttributes());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testLOCAL() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.NORMAL, ra.getDataPolicy());
assertEquals(Scope.LOCAL, ra.getScope());
}
@Test
public void testLOCAL_PERSISTENT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL_PERSISTENT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_REPLICATE, ra.getDataPolicy());
assertEquals(Scope.LOCAL, ra.getScope());
}
@Test
public void testLOCAL_HEAP_LRU() throws Exception {
Cache c = new CacheFactory(createGemFireProperties()).create();
RegionFactory factory = c.createRegionFactory(LOCAL_HEAP_LRU);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.NORMAL, ra.getDataPolicy());
assertEquals(Scope.LOCAL, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testLOCAL_OVERFLOW() throws Exception {
Cache c = new CacheFactory(createGemFireProperties()).create();
RegionFactory factory = c.createRegionFactory(LOCAL_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.NORMAL, ra.getDataPolicy());
assertEquals(Scope.LOCAL, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testLOCAL_PERSISTENT_OVERFLOW() throws Exception {
Cache c = new CacheFactory(createGemFireProperties()).create();
RegionFactory factory = c.createRegionFactory(LOCAL_PERSISTENT_OVERFLOW);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PERSISTENT_REPLICATE, ra.getDataPolicy());
assertEquals(Scope.LOCAL, ra.getScope());
assertEquals(EvictionAttributes.createLRUHeapAttributes(null, EvictionAction.OVERFLOW_TO_DISK), ra.getEvictionAttributes());
assertEquals(LocalRegion.DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE,
c.getResourceManager().getEvictionHeapPercentage(),
0);
}
@Test
public void testPARTITION_PROXY() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_PROXY);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(0, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(0, ra.getPartitionAttributes().getLocalMaxMemory());
}
@Test
public void testPARTITION_PROXY_REDUNDANT() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_PROXY_REDUNDANT);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
assertEquals(0, ra.getPartitionAttributes().getLocalMaxMemory());
}
@Test
public void testREPLICATE_PROXY() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PROXY);
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.EMPTY, ra.getDataPolicy());
assertEquals(Scope.DISTRIBUTED_ACK, ra.getScope());
}
@Test
public void testSetCacheLoader() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PROXY);
CacheLoader cl = new MyCacheLoader();
r1 = factory.setCacheLoader(cl).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(cl, ra.getCacheLoader());
}
@Test
public void testSetCacheWriter() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PROXY);
CacheWriter cw = new MyCacheWriter();
r1 = factory.setCacheWriter(cw).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(cw, ra.getCacheWriter());
}
@Test
public void testAddCacheListener() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PROXY);
CacheListener cl = new MyCacheListener();
r1 = factory.addCacheListener(cl).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(cl, ra.getCacheListener());
}
@Test
public void testInitCacheListener() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE_PROXY);
CacheListener cl1 = new MyCacheListener();
CacheListener cl2 = new MyCacheListener();
r1 = factory.initCacheListeners(new CacheListener[] {cl1, cl2}).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, Arrays.equals(new CacheListener[] {cl1, cl2}, ra.getCacheListeners()));
}
@Test
public void testSetEvictionAttributes() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(77)).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(EvictionAttributes.createLRUEntryAttributes(77), ra.getEvictionAttributes());
}
@Test
public void testSetEntryIdleTimeout() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
ExpirationAttributes ea = new ExpirationAttributes(7);
r1 = factory.setEntryIdleTimeout(ea).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ea, ra.getEntryIdleTimeout());
}
@Test
public void testSetCustomEntryIdleTimeout() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
MyCustomExpiry ce = new MyCustomExpiry();
r1 = factory.setCustomEntryIdleTimeout(ce).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ce, ra.getCustomEntryIdleTimeout());
}
@Test
public void testSetEntryTimeToLive() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
ExpirationAttributes ea = new ExpirationAttributes(7);
r1 = factory.setEntryTimeToLive(ea).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ea, ra.getEntryTimeToLive());
}
@Test
public void testSetCustomEntryTimeToLive() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
MyCustomExpiry ce = new MyCustomExpiry();
r1 = factory.setCustomEntryTimeToLive(ce).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ce, ra.getCustomEntryTimeToLive());
}
@Test
public void testSetRegionIdleTimeout() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
ExpirationAttributes ea = new ExpirationAttributes(7);
r1 = factory.setRegionIdleTimeout(ea).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ea, ra.getRegionIdleTimeout());
}
@Test
public void testSetRegionTimeToLive() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
ExpirationAttributes ea = new ExpirationAttributes(7);
r1 = factory.setRegionTimeToLive(ea).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ea, ra.getRegionTimeToLive());
}
@Test
public void testSetScope() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setScope(Scope.GLOBAL).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(Scope.GLOBAL, ra.getScope());
}
@Test
public void testSetDataPolicy() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setDataPolicy(DataPolicy.REPLICATE).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.REPLICATE, ra.getDataPolicy());
}
@Test
public void testSetEarlyAck() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setEarlyAck(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getEarlyAck());
}
@Test
public void testSetMulticastEnabled() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setMulticastEnabled(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getMulticastEnabled());
}
@Test
public void testSetEnableSubscriptionConflation() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setEnableSubscriptionConflation(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getEnableSubscriptionConflation());
}
@Test
public void testSetKeyConstraint() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setKeyConstraint(String.class).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(String.class, ra.getKeyConstraint());
}
@Test
public void testSetValueConstraint() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setValueConstraint(String.class).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(String.class, ra.getValueConstraint());
}
@Test
public void testSetInitialCapacity() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setInitialCapacity(777).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(777, ra.getInitialCapacity());
}
@Test
public void testSetLoadFactor() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setLoadFactor(77.7f).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(77.7f, ra.getLoadFactor(), 0);
}
@Test
public void testSetConcurrencyLevel() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setConcurrencyLevel(7).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(7, ra.getConcurrencyLevel());
}
@Test
public void testSetDiskStoreName() throws Exception {
Cache c = createCache();
c.createDiskStoreFactory().create("ds");
RegionFactory factory = c.createRegionFactory(LOCAL_PERSISTENT);
r1 = factory.setDiskStoreName("ds").create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals("ds", ra.getDiskStoreName());
}
@Test
public void testSetDiskSynchronous() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL_PERSISTENT);
r1 = factory.setDiskSynchronous(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.isDiskSynchronous());
}
@Test
public void testSetPartitionAttributes() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory();
PartitionAttributes pa = new PartitionAttributesFactory().setTotalNumBuckets(77).create();
r1 = factory.setPartitionAttributes(pa).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(pa, ra.getPartitionAttributes());
}
@Test
public void testSetMembershipAttributes() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory();
MembershipAttributes ma = new MembershipAttributes(new String[]{"role1", "role2"});
r1 = factory.setMembershipAttributes(ma).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(ma, ra.getMembershipAttributes());
}
@Test
public void testSetIndexMaintenanceSynchronous() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE);
r1 = factory.setIndexMaintenanceSynchronous(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getIndexMaintenanceSynchronous());
}
@Test
public void testSetStatisticsEnabled() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setStatisticsEnabled(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getStatisticsEnabled());
}
@Test
public void testSetIgnoreJTA() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE);
r1 = factory.setIgnoreJTA(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getIgnoreJTA());
}
@Test
public void testSetLockGrantor() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE);
r1 = factory.setScope(Scope.GLOBAL).setLockGrantor(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.isLockGrantor());
}
@Test
public void testSetSubscriptionAttributes() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(REPLICATE);
SubscriptionAttributes sa = new SubscriptionAttributes(InterestPolicy.ALL);
r1 = factory.setSubscriptionAttributes(sa).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(sa, ra.getSubscriptionAttributes());
}
@Test
public void testSetCloningEnabled() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setCloningEnabled(true).create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(true, ra.getCloningEnabled());
}
@Test
public void testSetPoolName() throws Exception {
Cache c = createCache();
PoolManager.createFactory().addServer("127.0.0.1", 7777).create("myPool");
RegionFactory factory = c.createRegionFactory(LOCAL);
r1 = factory.setPoolName("myPool").create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals("myPool", ra.getPoolName());
}
@Test
public void testBug45749() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT);
factory.setPartitionAttributes(new PartitionAttributesFactory().setTotalNumBuckets(5).create());
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(5, ra.getPartitionAttributes().getTotalNumBuckets());
assertEquals(1, ra.getPartitionAttributes().getRedundantCopies());
}
@Test
public void testBug45749part2() throws Exception {
Cache c = createCache();
RegionFactory factory = c.createRegionFactory(PARTITION_REDUNDANT);
factory.setPartitionAttributes(new PartitionAttributesFactory().setTotalNumBuckets(5).setRedundantCopies(2).create());
r1 = factory.create(this.r1Name);
RegionAttributes ra = r1.getAttributes();
assertEquals(DataPolicy.PARTITION, ra.getDataPolicy());
assertNotNull(ra.getPartitionAttributes());
assertEquals(5, ra.getPartitionAttributes().getTotalNumBuckets());
assertEquals(2, ra.getPartitionAttributes().getRedundantCopies());
}
private String getName() {
return getClass().getSimpleName() + "_" + testName.getMethodName();
}
private Properties createGemFireProperties() {
Properties props = new Properties();
props.put("mcast-port", "0");
props.put("locators", "");
return props;
}
private Cache createCache() {
return new CacheFactory(createGemFireProperties()).create();
}
private void cleanUpRegion(Region r) {
if (r != null && !r.getCache().isClosed() && !r.isDestroyed() && r.getCache().getDistributedSystem().isConnected()) {
this.cache = r.getCache();
this.distSys = this.cache.getDistributedSystem();
r.localDestroyRegion();
}
}
private void assertBasicRegionFunctionality(Region r, String name) {
assertEquals(r.getName(), name);
r.put(key, val);
assertEquals(r.getEntry(key).getValue(), val);
}
private static void assertRegionAttributes(RegionAttributes ra1, RegionAttributes ra2) {
assertEquals(ra1.getScope(), ra2.getScope());
assertEquals(ra1.getKeyConstraint(), ra2.getKeyConstraint());
assertEquals(ra1.getValueConstraint(), ra2.getValueConstraint());
assertEquals(ra1.getCacheListener(), ra2.getCacheListener());
assertEquals(ra1.getCacheWriter(), ra2.getCacheWriter());
assertEquals(ra1.getCacheLoader(), ra2.getCacheLoader());
assertEquals(ra1.getStatisticsEnabled(), ra2.getStatisticsEnabled());
assertEquals(ra1.getConcurrencyLevel(), ra2.getConcurrencyLevel());
assertEquals(ra1.getInitialCapacity(), ra2.getInitialCapacity());
assertTrue(ra1.getLoadFactor() == ra2.getLoadFactor());
assertEquals(ra1.getEarlyAck(), ra2.getEarlyAck());
assertEquals(ra1.isDiskSynchronous(), ra2.isDiskSynchronous());
assertEquals(ra1.getDiskStoreName(), ra2.getDiskStoreName());
}
private static class MyCacheListener extends CacheListenerAdapter {
}
private static class MyCacheLoader implements CacheLoader {
public Object load(LoaderHelper helper) throws CacheLoaderException {
return null;
}
public void close() {
}
}
private static class MyCacheWriter extends CacheWriterAdapter {
}
private static class MyCustomExpiry implements CustomExpiry {
public ExpirationAttributes getExpiry(Region.Entry entry) {
return null;
}
public void close() {
}
}
}