SGF-371 - The GatewayReceiverFactoryBean needs to set GatewayReceiverFactory.setManualStart(false) in GemFire 8.1 in order to enable manual starts on a GatewayReceiver.

This commit is contained in:
John Blum
2015-02-06 19:12:09 -08:00
parent c0aed1984c
commit 79f6025647
5 changed files with 63 additions and 18 deletions

View File

@@ -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<Boolean>() {
@Override
public Boolean answer(InvocationOnMock invocation) throws Throwable {
return running;
return StubGatewayReceiverFactory.this.running;
}
});
try {
doAnswer(new Answer<Void>() {
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<Void>() {
public Void answer(final InvocationOnMock invocation) throws Throwable {
StubGatewayReceiverFactory.this.running = false;
return null;
}
}).when(gatewayReceiver).stop();
return gatewayReceiver;
}

View File

@@ -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));

View File

@@ -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();