/*
* 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.assertTrue;
import static org.junit.Assert.fail;
import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionExistsException;
import org.apache.geode.cache.Scope;
import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.gemfire.fork.SpringContainerProcess;
/**
* The RegionLookupIntegrationTests class is a test suite of test cases testing the lookup functionality for various
* peer Region types.
*
* @author John Blum
* @see org.junit.Test
* @see org.springframework.context.ConfigurableApplicationContext
* @see SpringContainerProcess
* @see org.apache.geode.cache.Region
* @since 1.4.0
* @link https://jira.spring.io/browse/SGF-204
*/
public class RegionLookupIntegrationTests {
protected void assertNoRegionLookup(final String configLocation) {
ConfigurableApplicationContext applicationContext = null;
try {
applicationContext = createApplicationContext(configLocation);
fail("Spring ApplicationContext should have thrown a BeanCreationException caused by a RegionExistsException!");
}
catch (BeanCreationException expected) {
//expected.printStackTrace(System.err);
assertTrue(expected.getMessage(), expected.getCause() instanceof RegionExistsException);
throw (RegionExistsException) expected.getCause();
}
finally {
closeApplicationContext(applicationContext);
}
}
protected void closeApplicationContext(final ConfigurableApplicationContext applicationContext) {
if (applicationContext != null) {
applicationContext.close();
}
}
protected ConfigurableApplicationContext createApplicationContext(final String configLocation) {
return new ClassPathXmlApplicationContext(configLocation);
}
@Test
public void testAllowRegionBeanDefinitionOverrides() {
ConfigurableApplicationContext applicationContext = null;
try {
applicationContext = createApplicationContext(
"/org/springframework/data/gemfire/allowRegionBeanDefinitionOverridesTest.xml");
assertNotNull(applicationContext);
assertTrue(applicationContext.containsBean("regionOne"));
Region appDataRegion = applicationContext.getBean("regionOne", Region.class);
assertNotNull(appDataRegion);
assertEquals("AppDataRegion", appDataRegion.getName());
assertEquals("/AppDataRegion", appDataRegion.getFullPath());
assertNotNull(appDataRegion.getAttributes());
assertEquals(DataPolicy.PERSISTENT_REPLICATE, appDataRegion.getAttributes().getDataPolicy());
assertFalse(appDataRegion.getAttributes().getMulticastEnabled());
assertEquals(Scope.DISTRIBUTED_ACK, appDataRegion.getAttributes().getScope());
assertEquals(101, appDataRegion.getAttributes().getInitialCapacity());
assertEquals(new Float(0.85f), new Float(appDataRegion.getAttributes().getLoadFactor()));
assertTrue(appDataRegion.getAttributes().getCloningEnabled());
assertTrue(appDataRegion.getAttributes().getConcurrencyChecksEnabled());
assertEquals(Integer.class, appDataRegion.getAttributes().getKeyConstraint());
assertEquals(String.class, appDataRegion.getAttributes().getValueConstraint());
}
finally {
closeApplicationContext(applicationContext);
}
}
@Test(expected = RegionExistsException.class)
public void testNoDuplicateRegionDefinitions() {
assertNoRegionLookup("/org/springframework/data/gemfire/noDuplicateRegionDefinitionsTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoClientRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noClientRegionLookupTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoClientSubRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noClientSubRegionLookupTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoLocalRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noLocalRegionLookupTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoPartitionRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noPartitionRegionLookupTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoReplicateRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noReplicateRegionLookupTest.xml");
}
@Test(expected = RegionExistsException.class)
public void testNoSubRegionLookups() {
assertNoRegionLookup("/org/springframework/data/gemfire/noSubRegionLookupTest.xml");
}
@Test
public void testEnableRegionLookups() {
ConfigurableApplicationContext applicationContext = null;
try {
applicationContext = createApplicationContext("/org/springframework/data/gemfire/enableRegionLookupsTest.xml");
assertNotNull(applicationContext);
assertTrue(applicationContext.containsBean("NativeLocalRegion"));
assertTrue(applicationContext.containsBean("NativePartitionRegion"));
assertTrue(applicationContext.containsBean("NativeReplicateRegion"));
assertTrue(applicationContext.containsBean("NativeParentRegion"));
assertTrue(applicationContext.containsBean("/NativeParentRegion/NativeChildRegion"));
assertTrue(applicationContext.containsBean("SpringReplicateRegion"));
Region nativeLocalRegion = applicationContext.getBean("NativeLocalRegion", Region.class);
assertNotNull(nativeLocalRegion);
assertEquals("NativeLocalRegion", nativeLocalRegion.getName());
assertEquals("/NativeLocalRegion", nativeLocalRegion.getFullPath());
assertNotNull(nativeLocalRegion.getAttributes());
assertEquals(DataPolicy.NORMAL, nativeLocalRegion.getAttributes().getDataPolicy());
assertFalse(nativeLocalRegion.getAttributes().getCloningEnabled());
assertFalse(nativeLocalRegion.getAttributes().getConcurrencyChecksEnabled());
assertEquals(80, nativeLocalRegion.getAttributes().getConcurrencyLevel());
assertEquals(101, nativeLocalRegion.getAttributes().getInitialCapacity());
assertEquals(Integer.class, nativeLocalRegion.getAttributes().getKeyConstraint());
assertEquals(new Float(0.95f), new Float(nativeLocalRegion.getAttributes().getLoadFactor()));
assertEquals(String.class, nativeLocalRegion.getAttributes().getValueConstraint());
Region nativePartitionRegion = applicationContext.getBean("NativePartitionRegion", Region.class);
assertNotNull(nativePartitionRegion);
assertEquals("NativePartitionRegion", nativePartitionRegion.getName());
assertEquals("/NativePartitionRegion", nativePartitionRegion.getFullPath());
assertNotNull(nativePartitionRegion.getAttributes());
assertEquals(DataPolicy.PERSISTENT_PARTITION, nativePartitionRegion.getAttributes().getDataPolicy());
assertTrue(nativePartitionRegion.getAttributes().getCloningEnabled());
assertTrue(nativePartitionRegion.getAttributes().getConcurrencyChecksEnabled());
assertEquals(40, nativePartitionRegion.getAttributes().getConcurrencyLevel());
assertEquals(51, nativePartitionRegion.getAttributes().getInitialCapacity());
assertEquals(Integer.class, nativePartitionRegion.getAttributes().getKeyConstraint());
assertEquals(new Float(0.85f), new Float(nativePartitionRegion.getAttributes().getLoadFactor()));
assertFalse(nativePartitionRegion.getAttributes().getMulticastEnabled());
assertEquals(String.class, nativePartitionRegion.getAttributes().getValueConstraint());
Region nativeReplicateRegion = applicationContext.getBean("NativeReplicateRegion", Region.class);
assertNotNull(nativeReplicateRegion);
assertEquals("NativeReplicateRegion", nativeReplicateRegion.getName());
assertEquals("/NativeReplicateRegion", nativeReplicateRegion.getFullPath());
assertNotNull(nativeReplicateRegion.getAttributes());
assertEquals(DataPolicy.PERSISTENT_REPLICATE, nativeReplicateRegion.getAttributes().getDataPolicy());
assertFalse(nativeReplicateRegion.getAttributes().getCloningEnabled());
assertTrue(nativeReplicateRegion.getAttributes().getConcurrencyChecksEnabled());
assertEquals(23, nativeReplicateRegion.getAttributes().getInitialCapacity());
assertEquals(new Float(0.75f), new Float(nativeReplicateRegion.getAttributes().getLoadFactor()));
assertEquals(Integer.class, nativeReplicateRegion.getAttributes().getKeyConstraint());
assertFalse(nativeReplicateRegion.getAttributes().getMulticastEnabled());
assertEquals(Scope.DISTRIBUTED_NO_ACK, nativeReplicateRegion.getAttributes().getScope());
assertEquals(String.class, nativeReplicateRegion.getAttributes().getValueConstraint());
Region nativeChildRegion = applicationContext.getBean("/NativeParentRegion/NativeChildRegion", Region.class);
assertNotNull(nativeChildRegion);
assertEquals("NativeChildRegion", nativeChildRegion.getName());
assertEquals("/NativeParentRegion/NativeChildRegion", nativeChildRegion.getFullPath());
assertNotNull(nativeChildRegion.getAttributes());
assertEquals(DataPolicy.REPLICATE, nativeChildRegion.getAttributes().getDataPolicy());
Region springReplicateRegion = applicationContext.getBean("SpringReplicateRegion", Region.class);
assertNotNull(springReplicateRegion);
assertEquals("SpringReplicateRegion", springReplicateRegion.getName());
assertEquals("/SpringReplicateRegion", springReplicateRegion.getFullPath());
assertNotNull(springReplicateRegion.getAttributes());
assertEquals(DataPolicy.REPLICATE, springReplicateRegion.getAttributes().getDataPolicy());
}
finally {
closeApplicationContext(applicationContext);
}
}
@Test
public void testEnableClientRegionLookups() {
ConfigurableApplicationContext applicationContext = null;
try {
applicationContext = createApplicationContext("/org/springframework/data/gemfire/enableClientRegionLookupsTest.xml");
assertNotNull(applicationContext);
assertTrue(applicationContext.containsBean("NativeClientRegion"));
assertTrue(applicationContext.containsBean("NativeClientParentRegion"));
assertTrue(applicationContext.containsBean("/NativeClientParentRegion/NativeClientChildRegion"));
Region nativeClientRegion = applicationContext.getBean("NativeClientRegion", Region.class);
assertNotNull(nativeClientRegion);
assertEquals("NativeClientRegion", nativeClientRegion.getName());
assertEquals("/NativeClientRegion", nativeClientRegion.getFullPath());
assertNotNull(nativeClientRegion.getAttributes());
assertFalse(nativeClientRegion.getAttributes().getCloningEnabled());
assertEquals(DataPolicy.NORMAL, nativeClientRegion.getAttributes().getDataPolicy());
Region nativeClientChildRegion = applicationContext.getBean("/NativeClientParentRegion/NativeClientChildRegion",
Region.class);
assertNotNull(nativeClientChildRegion);
assertEquals("NativeClientChildRegion", nativeClientChildRegion.getName());
assertEquals("/NativeClientParentRegion/NativeClientChildRegion", nativeClientChildRegion.getFullPath());
assertNotNull(nativeClientChildRegion.getAttributes());
assertEquals(DataPolicy.NORMAL, nativeClientChildRegion.getAttributes().getDataPolicy());
}
finally {
closeApplicationContext(applicationContext);
}
}
}