From eb9ebec574dd81a5e2e39907667b0de7f62d2171 Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 1 Sep 2014 15:50:55 -0700 Subject: [PATCH] Additional test case to test SDG's auto Region lookup behavior with Spring's component-scan functionality. --- .../data/gemfire/AutoRegionLookupDao.java | 91 +++++++++++++++++++ ...WithComponentScanningIntegrationTests.java | 55 +++++++++++ ...ponentScanningIntegrationTests-context.xml | 32 +++++++ 3 files changed, 178 insertions(+) create mode 100644 src/test/java/org/springframework/data/gemfire/AutoRegionLookupDao.java create mode 100644 src/test/java/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests.java create mode 100644 src/test/resources/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests-context.xml diff --git a/src/test/java/org/springframework/data/gemfire/AutoRegionLookupDao.java b/src/test/java/org/springframework/data/gemfire/AutoRegionLookupDao.java new file mode 100644 index 00000000..e1d379e9 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/AutoRegionLookupDao.java @@ -0,0 +1,91 @@ +/* + * 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 javax.annotation.Resource; + +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Lazy; +import org.springframework.dao.support.DaoSupport; +import org.springframework.stereotype.Repository; + +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.Region; + +/** + * The AutoRegionLookupDao class is a Data Access Object (DAO) encapsulating references to several GemFire Cache Regions + * defined in native GemFire cache.xml and registered as beans in the Spring context using Spring Data GemFire's + * auto Region lookup functionality. This class is used in the AutoRegionLookupWithComponentScanningIntegrationTests + * class to ensure this @Repository component is auto-wired properly. + * + * @author John Blum + * @see org.springframework.dao.support.DaoSupport + * @see org.springframework.stereotype.Repository + * @see com.gemstone.gemfire.cache.Region + * @since 1.5.0 + */ +/* +*/ +@DependsOn("gemfireCache") +//@Lazy +@Repository("autoRegionLookupDao") +@SuppressWarnings("unused") +public class AutoRegionLookupDao extends DaoSupport { + + @Resource(name = "NativePartitionedRegion") + private Region nativePartitionedRegion; + + @Resource(name = "NativeReplicateParent") + private Region nativeReplicateParent; + + @Resource(name = "/NativeReplicateParent/NativeReplicateChild") + private Region nativeReplicateChild; + + @Resource(name = "/NativeReplicateParent/NativeReplicateChild/NativeReplicateGrandchild") + private Region nativeReplicateGrandchild; + + protected static void assertRegionMetaData(final Region region, + final String expectedName, final DataPolicy expectedDataPolicy) { + assertRegionMetaData(region, expectedName, Region.SEPARATOR + expectedName, expectedDataPolicy); + } + + protected static void assertRegionMetaData(final Region region, final String expectedName, + final String expectedFullPath, final DataPolicy expectedDataPolicy) { + assertNotNull(String.format("Region (%1$s) was not properly configured and initialized!", expectedName), region); + assertEquals(expectedName, region.getName()); + assertEquals(expectedFullPath, region.getFullPath()); + assertNotNull(String.format("Region (%1$s) must have RegionAttributes defined!", expectedName), + region.getAttributes()); + assertEquals(expectedDataPolicy, region.getAttributes().getDataPolicy()); + assertFalse(region.getAttributes().getDataPolicy().withPersistence()); + } + + @Override + protected void checkDaoConfig() throws IllegalArgumentException { + assertRegionMetaData(nativePartitionedRegion, "NativePartitionedRegion", DataPolicy.PARTITION); + assertRegionMetaData(nativeReplicateParent, "NativeReplicateParent", DataPolicy.REPLICATE); + assertRegionMetaData(nativeReplicateChild, "NativeReplicateChild", + "/NativeReplicateParent/NativeReplicateChild", DataPolicy.REPLICATE); + assertRegionMetaData(nativeReplicateGrandchild, "NativeReplicateGrandchild", + "/NativeReplicateParent/NativeReplicateChild/NativeReplicateGrandchild", DataPolicy.REPLICATE); + } + +} diff --git a/src/test/java/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests.java b/src/test/java/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests.java new file mode 100644 index 00000000..0800dec9 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests.java @@ -0,0 +1,55 @@ +/* + * 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.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * The AutoRegionLookupWithComponentScanningIntegrationTests class is a test suite class testing the behavior of + * Spring Data GemFire's auto Region lookup behavior with Spring component scanning functionality. + * + * @author John Blum + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @since 1.5.0 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@SuppressWarnings("unused") +public class AutoRegionLookupWithComponentScanningIntegrationTests { + + @Autowired + private ApplicationContext context; + + @Test + public void testAutowiredNativeRegions() { + assertTrue("The 'autoRegionLookupDao' Spring bean DAO was not properly configured an initialized!", + context.containsBean("autoRegionLookupDao")); + assertNotNull(context.getBean("autoRegionLookupDao", AutoRegionLookupDao.class)); + } + +} diff --git a/src/test/resources/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests-context.xml b/src/test/resources/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests-context.xml new file mode 100644 index 00000000..9b5daba9 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/AutoRegionLookupWithComponentScanningIntegrationTests-context.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + AutoRegionLookupWithComponentScanningIntegrationTests + 0 + warning + + + + + + +