package vnet.sms.gateway.server.framework; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import javax.jms.ObjectMessage; import org.jboss.netty.channel.local.DefaultLocalServerChannelFactory; import org.jboss.netty.channel.local.LocalAddress; import org.junit.Test; import org.springframework.jms.core.JmsTemplate; import org.springframework.security.authentication.AuthenticationManager; import vnet.sms.common.messages.Msisdn; import vnet.sms.common.messages.Sms; import vnet.sms.gateway.server.framework.internal.channel.GatewayServerChannelPipelineFactory; import vnet.sms.gateway.server.framework.spi.GatewayServerDescription; import vnet.sms.gateway.server.framework.test.AcceptAllAuthenticationManager; import vnet.sms.gateway.server.framework.test.LocalClient; import vnet.sms.gateway.transports.serialization.ReferenceableMessageContainer; public class SmsTest extends AbstractGatewayServerTest { @Test public final void assertThatGatewayServerForwardsReceivedSmsToJmsServer() throws Throwable { final LocalAddress serverAddress = new LocalAddress("test:server:10"); final int availableIncomingWindows = 1000; final long incomingWindowWaitTimeMillis = 1L; final long failedLoginResponseMillis = 100L; final int pingIntervalSeconds = 1; final long pingResponseTimeoutMillis = 200000L; final AuthenticationManager authenticationManager = new AcceptAllAuthenticationManager(); final JmsTemplate jmsTemplate = newJmsTemplate(); final GatewayServerChannelPipelineFactory<Integer, ReferenceableMessageContainer> channelPipelineFactory = newGatewayServerChannelPipelineFactory( "assertThatGatewayServerForwardsReceivedSmsToJmsServer", availableIncomingWindows, incomingWindowWaitTimeMillis, failedLoginResponseMillis, pingIntervalSeconds, pingResponseTimeoutMillis, authenticationManager, jmsTemplate); final GatewayServer<Integer, ReferenceableMessageContainer> objectUnderTest = new GatewayServer<Integer, ReferenceableMessageContainer>( new TestGatewayServerDescription(), "assertThatGatewayServerForwardsReceivedSmsToJmsServer", serverAddress, new DefaultLocalServerChannelFactory(), channelPipelineFactory); objectUnderTest.start(); final LocalClient client = new LocalClient(serverAddress); // Should start ping timeout client.connect(); // Login. Otherwise, our LoginResponse will be discarded client.login(1, "assertThatGatewayServerForwardsReceivedSmsToJmsServer", "whatever"); // Discard forwarded LoginRequest jmsTemplate.receive(); final Sms sms = new Sms(new Msisdn("01686754432"), new Msisdn( "01686754432"), "assertThatGatewayServerForwardsReceivedSmsToJmsServer"); client.sendMessage(2, sms); client.disconnect(); final ObjectMessage forwardedMessage = (ObjectMessage) jmsTemplate .receive(); objectUnderTest.stop(); assertNotNull( "GatewayServer should have forwarded SMS passed in to JMS server", forwardedMessage); assertEquals( "GatewayServer should have forwarded SMS passed in to JMS server", sms, forwardedMessage.getObject()); } @SuppressWarnings("serial") private static final class TestGatewayServerDescription extends GatewayServerDescription { public TestGatewayServerDescription() { super("Test", 1, 0, 0, "BETA", "15"); } } }