diff --git a/src/main/java/org/springframework/data/gemfire/config/GatewayReceiverParser.java b/src/main/java/org/springframework/data/gemfire/config/GatewayReceiverParser.java index 2170a99a..085990c3 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GatewayReceiverParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GatewayReceiverParser.java @@ -24,9 +24,11 @@ import org.w3c.dom.Element; /** * @author David Turanski - * + * @author John Blum + * @see org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser */ class GatewayReceiverParser extends AbstractSimpleBeanDefinitionParser { + @Override protected Class getBeanClass(Element element) { return GatewayReceiverFactoryBean.class; @@ -34,15 +36,19 @@ class GatewayReceiverParser extends AbstractSimpleBeanDefinitionParser { @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - builder.setLazyInit(false); String cacheRef = element.getAttribute("cache-ref"); - // add cache reference (fallback to default if nothing is specified) - builder.addConstructorArgReference((StringUtils.hasText(cacheRef) ? cacheRef : "gemfireCache")); + + builder.addConstructorArgReference((StringUtils.hasText(cacheRef) ? cacheRef + : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)); + builder.setLazyInit(false); + + ParsingUtils.setPropertyValue(element, builder, "bind-address"); ParsingUtils.setPropertyValue(element, builder, "start-port"); ParsingUtils.setPropertyValue(element, builder, "end-port"); - ParsingUtils.setPropertyValue(element, builder, "socket-buffer-size"); + ParsingUtils.setPropertyValue(element, builder, "manual-start"); ParsingUtils.setPropertyValue(element, builder, "maximum-time-between-pings"); - ParsingUtils.setPropertyValue(element, builder, "bind-address"); + ParsingUtils.setPropertyValue(element, builder, "socket-buffer-size"); ParsingUtils.parseTransportFilters(element, parserContext, builder); } + } diff --git a/src/main/java/org/springframework/data/gemfire/config/GatewaySenderParser.java b/src/main/java/org/springframework/data/gemfire/config/GatewaySenderParser.java index 270af601..1c3d1f80 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GatewaySenderParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GatewaySenderParser.java @@ -25,7 +25,8 @@ import org.w3c.dom.Element; /** * @author David Turanski - * + * @author John Blum + * @see org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser */ class GatewaySenderParser extends AbstractSimpleBeanDefinitionParser { @@ -36,12 +37,12 @@ class GatewaySenderParser extends AbstractSimpleBeanDefinitionParser { @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - String cacheRef = element.getAttribute("cache-ref"); - // add cache reference (fallback to default if nothing is specified) builder.addConstructorArgReference((StringUtils.hasText(cacheRef) ? cacheRef - : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)); + : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)); + + ParsingUtils.setPropertyValue(element, builder, NAME_ATTRIBUTE); ParsingUtils.setPropertyValue(element, builder, "alert-threshold"); ParsingUtils.setPropertyValue(element, builder, "batch-size"); ParsingUtils.setPropertyValue(element, builder, "batch-time-interval"); @@ -52,39 +53,40 @@ class GatewaySenderParser extends AbstractSimpleBeanDefinitionParser { ParsingUtils.setPropertyValue(element, builder, "manual-start"); ParsingUtils.setPropertyValue(element, builder, "maximum-queue-memory"); ParsingUtils.setPropertyValue(element, builder, "order-policy"); + ParsingUtils.setPropertyValue(element, builder, "parallel"); + ParsingUtils.setPropertyValue(element, builder, "persistent"); ParsingUtils.setPropertyValue(element, builder, "remote-distributed-system-id"); ParsingUtils.setPropertyValue(element, builder, "socket-buffer-size"); ParsingUtils.setPropertyValue(element, builder, "socket-read-timeout"); - ParsingUtils.setPropertyValue(element, builder, "persistent"); - ParsingUtils.setPropertyValue(element, builder, "parallel"); - ParsingUtils.setPropertyValue(element, builder, NAME_ATTRIBUTE); Element eventFilterElement = DomUtils.getChildElementByTagName(element, "event-filter"); + if (eventFilterElement != null) { - builder.addPropertyValue("eventFilters", - ParsingUtils.parseRefOrNestedBeanDeclaration(parserContext, eventFilterElement, builder)); + builder.addPropertyValue("eventFilters", ParsingUtils.parseRefOrNestedBeanDeclaration( + parserContext, eventFilterElement, builder)); } ParsingUtils.parseTransportFilters(element, parserContext, builder); - /** - * set the name for an inner bean - */ + // set the name for the GatewaySender as an inner bean if (!StringUtils.hasText(element.getAttribute(NAME_ATTRIBUTE))) { if (element.getParentNode().getNodeName().endsWith("region")) { Element region = (Element) element.getParentNode(); - String regionName = StringUtils.hasText(region.getAttribute("name")) ? region.getAttribute("name") - : region.getAttribute("id"); - int i = 0; - String name = regionName + ".gatewaySender#" + i; - while (parserContext.getRegistry().isBeanNameInUse(name)) { - i++; - name = regionName + ".gatewaySender#" + i; + String regionName = (StringUtils.hasText(region.getAttribute(NAME_ATTRIBUTE)) + ? region.getAttribute(NAME_ATTRIBUTE) : region.getAttribute(ID_ATTRIBUTE)); + + int number = 0; + + String gatewaySenderName = (regionName + ".gatewaySender#" + number); + + while (parserContext.getRegistry().isBeanNameInUse(gatewaySenderName)) { + gatewaySenderName = (regionName + ".gatewaySender#" + (++number)); } - builder.addPropertyValue("name", name); + builder.addPropertyValue("name", gatewaySenderName); } } } + } diff --git a/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java index 40ef2d6d..b701aebb 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.management.internal.cli.util.spring.StringUtils; /** * Base class for GemFire WAN Gateway component factory beans. @@ -34,7 +35,7 @@ import com.gemstone.gemfire.cache.Cache; * @author David Turanski * @author John Blum */ -public abstract class AbstractWANComponentFactoryBean implements FactoryBean, InitializingBean, BeanNameAware, +public abstract class AbstractWANComponentFactoryBean implements BeanNameAware, FactoryBean, InitializingBean, DisposableBean { protected static final List VALID_ORDER_POLICIES = Arrays.asList("KEY", "PARTITION", "THREAD"); @@ -51,34 +52,24 @@ public abstract class AbstractWANComponentFactoryBean implements FactoryBean< protected AbstractWANComponentFactoryBean(final Cache cache) { this.cache = cache; } - - public void setName(String name) { + + @Override + public final void setBeanName(final String beanName) { + this.beanName = beanName; + } + + public void setFactory(Object factory) { + this.factory = factory; + } + + public void setName(final String name) { this.name = name; } public String getName() { - return (name != null ? name: beanName); + return (StringUtils.hasText(name) ? name: beanName); } - @Override - public void destroy() throws Exception { - // TODO Auto-generated method stub - } - - @Override - public final void setBeanName(String beanName) { - this.beanName = beanName; - } - - @Override - public final void afterPropertiesSet() throws Exception { - Assert.notNull(getName(), "Name cannot be null"); - Assert.notNull(cache, "Cache cannot be null"); - doInit(); - } - - protected abstract void doInit() throws Exception; - @Override public abstract T getObject() throws Exception; @@ -89,9 +80,18 @@ public abstract class AbstractWANComponentFactoryBean implements FactoryBean< public final boolean isSingleton() { return true; } - - public void setFactory(Object factory) { - this.factory = factory; + + @Override + public final void afterPropertiesSet() throws Exception { + Assert.notNull(getName(), "Name must not be null."); + Assert.notNull(cache, "Cache must not be null."); + doInit(); } - + + protected abstract void doInit() throws Exception; + + @Override + public void destroy() throws Exception { + } + } diff --git a/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java index ac39fb6e..0d976a50 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java @@ -15,8 +15,10 @@ */ package org.springframework.data.gemfire.wan; +import java.io.IOException; import java.util.List; +import org.springframework.context.SmartLifecycle; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -29,20 +31,26 @@ import com.gemstone.gemfire.cache.wan.GatewayTransportFilter; * FactoryBean for creating a GemFire {@link GatewayReceiver}. * * @author David Turanski - * + * @author John Blum + * @see org.springframework.data.gemfire.wan.AbstractWANComponentFactoryBean + * @see com.gemstone.gemfire.cache.Cache + * @see com.gemstone.gemfire.cache.wan.GatewayReceiver + * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory + * @since 1.2.2 */ -public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean { - private GatewayReceiver gatewayReceiver; +public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean + implements SmartLifecycle { - private List transportFilters; + private boolean manualStart = false; - private Integer startPort; + private volatile GatewayReceiver gatewayReceiver; private Integer endPort; - private Integer maximumTimeBetweenPings; - private Integer socketBufferSize; + private Integer startPort; + + private List transportFilters; private String bindAddress; @@ -63,44 +71,48 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< @Override public Class getObjectType() { - return GatewayReceiver.class; + return (gatewayReceiver != null ? gatewayReceiver.getClass() : GatewayReceiver.class); } @Override protected void doInit() throws Exception { GatewayReceiverFactory gatewayReceiverFactory = cache.createGatewayReceiverFactory(); + if (!CollectionUtils.isEmpty(transportFilters)) { for (GatewayTransportFilter transportFilter : transportFilters) { gatewayReceiverFactory.addGatewayTransportFilter(transportFilter); } } - int minPort = (startPort == null) ? GatewayReceiver.DEFAULT_START_PORT : startPort; - int maxPort = (endPort == null) ? GatewayReceiver.DEFAULT_END_PORT : endPort; - Assert.isTrue(minPort <= maxPort, "startPort must be less then or equal to " + maxPort); - gatewayReceiverFactory.setStartPort(minPort); - gatewayReceiverFactory.setEndPort(maxPort); - if (socketBufferSize != null) { - gatewayReceiverFactory.setSocketBufferSize(socketBufferSize); - } - if (maximumTimeBetweenPings != null) { - gatewayReceiverFactory.setMaximumTimeBetweenPings(maximumTimeBetweenPings); - } + if (bindAddress != null) { gatewayReceiverFactory.setBindAddress(bindAddress); } + int minPort = (startPort != null ? startPort : GatewayReceiver.DEFAULT_START_PORT); + int maxPort = (endPort != null ? endPort : GatewayReceiver.DEFAULT_END_PORT); + + Assert.isTrue(minPort <= maxPort, String.format("'startPort' must be less than or equal to %1$d.", maxPort)); + + gatewayReceiverFactory.setStartPort(minPort); + gatewayReceiverFactory.setEndPort(maxPort); + + if (maximumTimeBetweenPings != null) { + gatewayReceiverFactory.setMaximumTimeBetweenPings(maximumTimeBetweenPings); + } + + if (socketBufferSize != null) { + gatewayReceiverFactory.setSocketBufferSize(socketBufferSize); + } + gatewayReceiver = gatewayReceiverFactory.create(); - - gatewayReceiver.start(); - } - public void setGatewayReceiver(GatewayReceiver gatewayReceiver) { + public void setGatewayReceiver(final GatewayReceiver gatewayReceiver) { this.gatewayReceiver = gatewayReceiver; } - public void setTransportFilters(List transportFilters) { - this.transportFilters = transportFilters; + public void setBindAddress(String bindAddress) { + this.bindAddress = bindAddress; } public void setStartPort(Integer startPort) { @@ -111,6 +123,10 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< this.endPort = endPort; } + public void setManualStart(Boolean manualStart) { + this.manualStart = Boolean.TRUE.equals(manualStart); + } + public void setMaximumTimeBetweenPings(Integer maximumTimeBetweenPings) { this.maximumTimeBetweenPings = maximumTimeBetweenPings; } @@ -119,8 +135,48 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< this.socketBufferSize = socketBufferSize; } - public void setBindAddress(String bindAddress) { - this.bindAddress = bindAddress; + public void setTransportFilters(List transportFilters) { + this.transportFilters = transportFilters; + } + + @Override + public boolean isAutoStartup() { + return !manualStart; + } + + @Override + public int getPhase() { + return Integer.MAX_VALUE; + } + + @Override + public boolean isRunning() { + return gatewayReceiver.isRunning(); + } + + @Override + public void start() { + Assert.state(gatewayReceiver != null, "The GatewayReceiver was not properly configured and initialized!"); + + if (!isRunning()) { + try { + gatewayReceiver.start(); + } + catch (IOException e) { + throw new RuntimeException("Failed to start Gateway Receiver due to I/O error.", e); + } + } + } + + @Override + public void stop() { + gatewayReceiver.stop(); + } + + @Override + public void stop(final Runnable callback) { + stop(); + callback.run(); } } diff --git a/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java index 6cea311e..e39c463a 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java @@ -33,6 +33,13 @@ import com.gemstone.gemfire.cache.wan.GatewayTransportFilter; * * @author David Turanski * @author John Blum + * @see org.springframework.context.SmartLifecycle + * @see org.springframework.data.gemfire.wan.AbstractWANComponentFactoryBean + * @see com.gemstone.gemfire.cache.Cache + * @see com.gemstone.gemfire.cache.util.Gateway + * @see com.gemstone.gemfire.cache.wan.GatewaySender + * @see com.gemstone.gemfire.cache.wan.GatewaySenderFactory + * @since 1.2.2 */ @SuppressWarnings("unused") public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean @@ -81,7 +88,7 @@ public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean getObjectType() { - return GatewaySender.class; + return (gatewaySender != null ? gatewaySender.getClass() : GatewaySender.class); } @Override @@ -159,6 +166,7 @@ public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean - + - + - - - - - - - - - - - - - - - @@ -2502,20 +2477,24 @@ The maximum time interval that can elapse before a partial batch is sent from a ]]> - - - - - - + + + + + + + + + + + @@ -2527,6 +2506,20 @@ Specifies the order policy. Order policy only applies if the gateway sender que KEY: Indicates that events will be concurrently processed based on the event's key, PARTITION: Indicates that events will be concurrently processed based on the event's partition (using the PartitionResolver) THREAD: Indicates that events will be concurrently processed based on the event's originating member and thread + ]]> + + + + + + + + + + @@ -2540,23 +2533,14 @@ Specifies the batch size ]]> - - - - - - + - + + + + + + @@ -2587,6 +2578,27 @@ A gateway receiver definition (requires Gemfire 7.0 or later) + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - diff --git a/src/test/java/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest.java b/src/test/java/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest.java new file mode 100644 index 00000000..9636b71a --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest.java @@ -0,0 +1,84 @@ +/* + * 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.config; + +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 javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer; +import org.springframework.data.gemfire.wan.GatewayReceiverFactoryBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.gemstone.gemfire.cache.wan.GatewayReceiver; + +/** + * The GatewayReceiverNamespaceTest class is a test suite of test cases testing the contract and functionality of + * Gateway Receiver configuration in Spring Data GemFire using the XML namespace and schema (XSD). + * + * @author John Blum + * @see org.junit.Test + * @since 1.5.0 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(initializers = GemfireTestApplicationContextInitializer.class) +@SuppressWarnings("unused") +public class GatewayReceiverNamespaceTest { + + @Resource(name = "&Default") + private GatewayReceiverFactoryBean defaultFactoryBean; + + @Resource(name = "&Auto") + private GatewayReceiverFactoryBean autoGatewayReceiver; + + @Resource(name = "&Manual") + private GatewayReceiverFactoryBean manualGatewayReceiver; + + @Test + public void testDefault() throws Exception { + assertNotNull("The 'Default' GatewayReceiverFactoryBean was not properly configured and initialized!", defaultFactoryBean); + assertTrue(defaultFactoryBean.isAutoStartup()); + + GatewayReceiver defaultGatewayReceiver = defaultFactoryBean.getObject(); + + assertNotNull(defaultGatewayReceiver); + assertEquals("192.168.0.1", defaultGatewayReceiver.getBindAddress()); + assertEquals(12345, defaultGatewayReceiver.getStartPort()); + assertEquals(54321, defaultGatewayReceiver.getEndPort()); + assertEquals(5000, defaultGatewayReceiver.getMaximumTimeBetweenPings()); + assertEquals(32768, defaultGatewayReceiver.getSocketBufferSize()); + } + + @Test + public void testAuto() { + assertNotNull("The 'Auto' GatewayReceiverFactoryBean was not properly configured and initialized!", autoGatewayReceiver); + assertTrue(autoGatewayReceiver.isAutoStartup()); + } + + @Test + public void testManual() { + assertNotNull("The 'Manual' GatewayReceiverFactoryBean was not properly configured and initialized!", manualGatewayReceiver); + assertFalse(manualGatewayReceiver.isAutoStartup()); + } + +} diff --git a/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java b/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java index ec3047aa..8c15f4f7 100644 --- a/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java +++ b/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java @@ -27,13 +27,15 @@ import com.gemstone.gemfire.cache.wan.GatewayTransportFilter; * */ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { - - private int startPort; + private int endPort; - private String bindAddress; - private List gatewayTransportFilters = new ArrayList(); private int maximumTimeBetweenPings; private int socketBufferSize; + private int startPort; + + private List gatewayTransportFilters = new ArrayList(); + + private String bindAddress; private String hostnameForClients; /* (non-Javadoc) @@ -115,14 +117,15 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { @Override public GatewayReceiver create() { GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class); + when(gatewayReceiver.getBindAddress()).thenReturn(this.bindAddress); when(gatewayReceiver.getEndPort()).thenReturn(this.endPort); when(gatewayReceiver.getGatewayTransportFilters()).thenReturn(this.gatewayTransportFilters); + when(gatewayReceiver.getHost()).thenReturn(this.hostnameForClients); when(gatewayReceiver.getMaximumTimeBetweenPings()).thenReturn(this.maximumTimeBetweenPings); when(gatewayReceiver.getSocketBufferSize()).thenReturn(this.socketBufferSize); when(gatewayReceiver.getStartPort()).thenReturn(this.startPort); - when(gatewayReceiver.getHost()).thenReturn(this.hostnameForClients); - + return gatewayReceiver; } diff --git a/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java b/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java new file mode 100644 index 00000000..31c908fa --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java @@ -0,0 +1,94 @@ +/* + * 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.wan; + +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 java.io.IOException; +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.gemstone.gemfire.cache.wan.GatewayReceiver; + +/** + * The ManualGatewayReceiverStartIntegrationTest class is a test suite of test cases testing the manual start capability + * of Gateway Receivers when configured with the Spring Data GemFire XML namespace. + * + * @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 ManualGatewayReceiverStartIntegrationTest { + + @Resource(name = "Auto") + private GatewayReceiver autoGatewayReceiver; + + @Resource(name = "Manual") + private GatewayReceiver manualGatewayReceiver; + + @Test + public void testAutoGatewayReceiver() { + assertNotNull("The 'Auto' GatewayReceiver was not properly configured or initialized!", autoGatewayReceiver); + assertEquals(7070, autoGatewayReceiver.getStartPort()); + assertEquals(7700, autoGatewayReceiver.getEndPort()); + assertTrue(autoGatewayReceiver.isRunning()); + + final int gatewayReceiverPort = autoGatewayReceiver.getPort(); + + assertTrue(gatewayReceiverPort >= autoGatewayReceiver.getStartPort() + && gatewayReceiverPort <= autoGatewayReceiver.getEndPort()); + + autoGatewayReceiver.stop(); + + assertFalse(autoGatewayReceiver.isRunning()); + } + + @Test + public void testManualGatewayReceiverConfiguration() throws IOException { + assertNotNull("The 'Manual' GatewayReceiver was not properly configured or initialized!", manualGatewayReceiver); + assertFalse(manualGatewayReceiver.isRunning()); + assertEquals(6060, manualGatewayReceiver.getStartPort()); + assertEquals(6600, manualGatewayReceiver.getEndPort()); + + manualGatewayReceiver.start(); + + assertTrue(manualGatewayReceiver.isRunning()); + + final int gateReceiverPort = manualGatewayReceiver.getPort(); + + assertTrue(gateReceiverPort >= manualGatewayReceiver.getStartPort() + && gateReceiverPort <= manualGatewayReceiver.getEndPort()); + + manualGatewayReceiver.stop(); + + assertFalse(manualGatewayReceiver.isRunning()); + } + +} diff --git a/src/test/resources/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest-context.xml b/src/test/resources/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest-context.xml new file mode 100644 index 00000000..ef5136b7 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/config/GatewayReceiverNamespaceTest-context.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest-context.xml b/src/test/resources/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest-context.xml new file mode 100644 index 00000000..f644d847 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest-context.xml @@ -0,0 +1,25 @@ + + + + + SpringDataGemFirePeerCache + 0 + config + + + + + + + + + +