From 79f602564705ec8f9588a493e63e6688a7f02a1c Mon Sep 17 00:00:00 2001 From: John Blum Date: Fri, 6 Feb 2015 19:12:09 -0800 Subject: [PATCH] SGF-371 - The GatewayReceiverFactoryBean needs to set GatewayReceiverFactory.setManualStart(false) in GemFire 8.1 in order to enable manual starts on a GatewayReceiver. --- .../wan/GatewayReceiverFactoryBean.java | 9 +++-- .../test/StubGatewayReceiverFactory.java | 38 +++++++++++++++++-- .../wan/GatewayReceiverFactoryBeanTest.java | 7 +++- ...alGatewayReceiverStartIntegrationTest.java | 25 ++++++++---- ...ayReceiverStartIntegrationTest-context.xml | 2 +- 5 files changed, 63 insertions(+), 18 deletions(-) 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 a0ab9f41..5023e774 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java @@ -96,6 +96,10 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< gatewayReceiverFactory.setHostnameForSenders(hostnameForSenders); } + if (maximumTimeBetweenPings != null) { + gatewayReceiverFactory.setMaximumTimeBetweenPings(maximumTimeBetweenPings); + } + int localStartPort = (startPort != null ? startPort : GatewayReceiver.DEFAULT_START_PORT); int localEndPort = (endPort != null ? endPort : GatewayReceiver.DEFAULT_END_PORT); @@ -104,10 +108,7 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< gatewayReceiverFactory.setStartPort(localStartPort); gatewayReceiverFactory.setEndPort(localEndPort); - - if (maximumTimeBetweenPings != null) { - gatewayReceiverFactory.setMaximumTimeBetweenPings(maximumTimeBetweenPings); - } + gatewayReceiverFactory.setManualStart(true); if (socketBufferSize != null) { gatewayReceiverFactory.setSocketBufferSize(socketBufferSize); 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 7e1eb5ac..a9f2cae3 100644 --- a/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java +++ b/src/test/java/org/springframework/data/gemfire/test/StubGatewayReceiverFactory.java @@ -10,6 +10,7 @@ * 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.test; import static org.mockito.Mockito.doAnswer; @@ -19,6 +20,7 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Random; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -38,6 +40,8 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { private volatile boolean running; + private boolean manualStart; + private int endPort; private int maximumTimeBetweenPings; private int socketBufferSize; @@ -131,10 +135,25 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { return this; } - /* (non-Javadoc) - * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#create() + /* + * (non-Javadoc) + * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#setManualStart(boolean) */ @Override + public GatewayReceiverFactory setManualStart(final boolean manualStart) { + this.manualStart = manualStart; + return this; + } + + private int generatePort() { + final int portIncrement = new Random(System.currentTimeMillis()).nextInt(this.endPort - this.startPort); + return Math.min(this.startPort + portIncrement, this.endPort); + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory#create() + */ + @Override public GatewayReceiver create() { GatewayReceiver gatewayReceiver = mock(GatewayReceiver.class); @@ -143,19 +162,23 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { when(gatewayReceiver.getGatewayTransportFilters()).thenReturn(this.gatewayTransportFilters); when(gatewayReceiver.getHost()).thenReturn(StringUtils.hasText(this.hostnameForSenders) ? this.hostnameForSenders : this.hostnameForClients); + when(gatewayReceiver.isManualStart()).thenReturn(this.manualStart); when(gatewayReceiver.getMaximumTimeBetweenPings()).thenReturn(this.maximumTimeBetweenPings); + when(gatewayReceiver.getPort()).thenReturn(generatePort()); when(gatewayReceiver.getSocketBufferSize()).thenReturn(this.socketBufferSize); when(gatewayReceiver.getStartPort()).thenReturn(this.startPort); + when(gatewayReceiver.isRunning()).thenAnswer(new Answer() { @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { - return running; + return StubGatewayReceiverFactory.this.running; } }); + try { doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { - running = true; + StubGatewayReceiverFactory.this.running = true; return null; } }).when(gatewayReceiver).start(); @@ -164,6 +187,13 @@ public class StubGatewayReceiverFactory implements GatewayReceiverFactory { throw new RuntimeException(e); } + doAnswer(new Answer() { + public Void answer(final InvocationOnMock invocation) throws Throwable { + StubGatewayReceiverFactory.this.running = false; + return null; + } + }).when(gatewayReceiver).stop(); + return gatewayReceiver; } diff --git a/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java index 208e678b..19e3f8ca 100644 --- a/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java @@ -32,10 +32,12 @@ import com.gemstone.gemfire.cache.wan.GatewayReceiverFactory; import com.gemstone.gemfire.cache.wan.GatewayTransportFilter; /** - * The GatewayReceiverFactoryBeanTest class... + * The GatewayReceiverFactoryBeanTest class is a test suite of test cases testing the contract and functionality + * of the GatewayReceiverFactoryBean class. * * @author John Blum - * @see org.springframework.data.gemfire. + * @see org.springframework.data.gemfire.wan.GatewayReceiverFactoryBean + * @see com.gemstone.gemfire.cache.wan.GatewayReceiverFactory * @since 1.5.0 */ public class GatewayReceiverFactoryBeanTest { @@ -65,6 +67,7 @@ public class GatewayReceiverFactoryBeanTest { verify(mockGatewayReceiverFactory).setHostnameForSenders(eq("skullbox")); verify(mockGatewayReceiverFactory).setStartPort(eq(2048)); verify(mockGatewayReceiverFactory).setEndPort(eq(4096)); + verify(mockGatewayReceiverFactory).setManualStart(eq(true)); verify(mockGatewayReceiverFactory).setMaximumTimeBetweenPings(eq(5000)); verify(mockGatewayReceiverFactory).setSocketBufferSize(eq(16384)); verify(mockGatewayReceiverFactory).addGatewayTransportFilter(same(mockGatewayTransportFilter)); diff --git a/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java b/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java index 31c908fa..c9206e5c 100644 --- a/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java +++ b/src/test/java/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest.java @@ -26,6 +26,7 @@ import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -38,12 +39,13 @@ import com.gemstone.gemfire.cache.wan.GatewayReceiver; * @author John Blum * @see org.junit.Test * @see org.junit.runner.RunWith + * @see org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer * @see org.springframework.test.context.ContextConfiguration * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner * @since 1.5.0 */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration +@ContextConfiguration(initializers = GemfireTestApplicationContextInitializer.class) @SuppressWarnings("unused") public class ManualGatewayReceiverStartIntegrationTest { @@ -53,17 +55,24 @@ public class ManualGatewayReceiverStartIntegrationTest { @Resource(name = "Manual") private GatewayReceiver manualGatewayReceiver; + protected void assertGreaterThanEqualToLessThanEqualTo(final String message, + final int actualValue, final int lowerBound, final int upperBound) { + assertTrue(message, actualValue >= lowerBound && actualValue <= upperBound); + } + @Test public void testAutoGatewayReceiver() { assertNotNull("The 'Auto' GatewayReceiver was not properly configured or initialized!", autoGatewayReceiver); + assertTrue(autoGatewayReceiver.isRunning()); assertEquals(7070, autoGatewayReceiver.getStartPort()); assertEquals(7700, autoGatewayReceiver.getEndPort()); - assertTrue(autoGatewayReceiver.isRunning()); final int gatewayReceiverPort = autoGatewayReceiver.getPort(); - assertTrue(gatewayReceiverPort >= autoGatewayReceiver.getStartPort() - && gatewayReceiverPort <= autoGatewayReceiver.getEndPort()); + assertGreaterThanEqualToLessThanEqualTo(String.format( + "GatewayReceiver 'port' (%1$d) was not greater than equal to (%2$d) and less than equal to (%3$d)!", + gatewayReceiverPort, autoGatewayReceiver.getStartPort(), autoGatewayReceiver.getEndPort()), + gatewayReceiverPort, autoGatewayReceiver.getStartPort(), autoGatewayReceiver.getEndPort()); autoGatewayReceiver.stop(); @@ -81,10 +90,12 @@ public class ManualGatewayReceiverStartIntegrationTest { assertTrue(manualGatewayReceiver.isRunning()); - final int gateReceiverPort = manualGatewayReceiver.getPort(); + final int gatewayReceiverPort = manualGatewayReceiver.getPort(); - assertTrue(gateReceiverPort >= manualGatewayReceiver.getStartPort() - && gateReceiverPort <= manualGatewayReceiver.getEndPort()); + assertGreaterThanEqualToLessThanEqualTo(String.format( + "GatewayReceiver 'port' (%1$d) was not greater than equal to (%2$d) and less than equal to (%3$d)!", + gatewayReceiverPort, manualGatewayReceiver.getStartPort(), manualGatewayReceiver.getEndPort()), + gatewayReceiverPort, manualGatewayReceiver.getStartPort(), manualGatewayReceiver.getEndPort()); manualGatewayReceiver.stop(); 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 index f53756fc..dcd4f4d7 100644 --- a/src/test/resources/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest-context.xml +++ b/src/test/resources/org/springframework/data/gemfire/wan/ManualGatewayReceiverStartIntegrationTest-context.xml @@ -12,7 +12,7 @@ ManualGatewayReceiverStartIntegrationTest 0 - config + warning