package vnet.sms.gateway.server.framework.jmsbridge;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.net.InetSocketAddress;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.UpstreamMessageEvent;
import org.junit.Test;
import org.springframework.jms.core.JmsTemplate;
import vnet.sms.common.messages.LoginRequest;
import vnet.sms.common.messages.LoginResponse;
import vnet.sms.common.messages.Msisdn;
import vnet.sms.common.messages.PingRequest;
import vnet.sms.common.messages.PingResponse;
import vnet.sms.common.messages.Sms;
import vnet.sms.common.wme.jmsbridge.WindowedMessageEventToJmsMessageConverter;
import vnet.sms.common.wme.receive.ReceivedLoginRequestAcknowledgementEvent;
import vnet.sms.common.wme.receive.ReceivedLoginRequestEvent;
import vnet.sms.common.wme.receive.ReceivedPingRequestAcknowledgementEvent;
import vnet.sms.common.wme.receive.ReceivedPingRequestEvent;
import vnet.sms.common.wme.receive.ReceivedSmsEvent;
import vnet.sms.gateway.server.framework.internal.jmsbridge.IncomingMessagesForwardingJmsBridge;
import com.mockrunner.jms.ConfigurationManager;
import com.mockrunner.jms.DestinationManager;
import com.mockrunner.mock.jms.MockQueueConnectionFactory;
public class MessageForwardingJmsBridgeTest {
private static final String DEFAULT_QUEUE_NAME = "queue.test.defaultDestination";
@Test(expected = IllegalArgumentException.class)
public final void assertThatConstructorRejectsNullJmsTemplate() {
new IncomingMessagesForwardingJmsBridge<Integer>(null);
}
@Test
public final void assertThatSmsReceivedForwardsSmsToJmsQueue()
throws JMSException {
final DestinationManager destinationManager = new DestinationManager();
destinationManager.createQueue(DEFAULT_QUEUE_NAME);
final ConfigurationManager configurationManager = new ConfigurationManager();
final ConnectionFactory mockConnFactory = new MockQueueConnectionFactory(
destinationManager, configurationManager);
final JmsTemplate jmsTemplate = new JmsTemplate(mockConnFactory);
jmsTemplate.setDefaultDestinationName(DEFAULT_QUEUE_NAME);
jmsTemplate
.setMessageConverter(new WindowedMessageEventToJmsMessageConverter());
final IncomingMessagesForwardingJmsBridge<Integer> objectUnderTest = new IncomingMessagesForwardingJmsBridge<Integer>(
jmsTemplate);
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
replay(receivingChannel);
final Sms message = new Sms(new Msisdn("01686754432"), new Msisdn(
"01686754432"),
"assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue");
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, receivingChannel.getRemoteAddress());
final ReceivedSmsEvent<Integer> windowedMessageEvent = new ReceivedSmsEvent<Integer>(
messageReference, upstreamMessageEvent, message);
objectUnderTest.smsReceived(windowedMessageEvent);
final ObjectMessage forwardedMessage = ObjectMessage.class
.cast(jmsTemplate.receive());
assertNotNull(
"IncomingMessagesForwardingJmsBridge did not forward SMS to JMS queue",
forwardedMessage);
assertEquals(
"IncomingMessagesForwardingJmsBridge did not forward SMS but rather a different message",
message, forwardedMessage.getObject());
}
@Test
public final void assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue()
throws JMSException {
final DestinationManager destinationManager = new DestinationManager();
destinationManager.createQueue(DEFAULT_QUEUE_NAME);
final ConfigurationManager configurationManager = new ConfigurationManager();
final ConnectionFactory mockConnFactory = new MockQueueConnectionFactory(
destinationManager, configurationManager);
final JmsTemplate jmsTemplate = new JmsTemplate(mockConnFactory);
jmsTemplate.setDefaultDestinationName(DEFAULT_QUEUE_NAME);
jmsTemplate
.setMessageConverter(new WindowedMessageEventToJmsMessageConverter());
final IncomingMessagesForwardingJmsBridge<Integer> objectUnderTest = new IncomingMessagesForwardingJmsBridge<Integer>(
jmsTemplate);
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
replay(receivingChannel);
final LoginRequest message = new LoginRequest(
"assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue",
"assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue");
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, receivingChannel.getRemoteAddress());
final ReceivedLoginRequestEvent<Integer> windowedMessageEvent = new ReceivedLoginRequestEvent<Integer>(
messageReference, upstreamMessageEvent, message);
objectUnderTest.loginRequestReceived(windowedMessageEvent);
final ObjectMessage forwardedMessage = ObjectMessage.class
.cast(jmsTemplate.receive());
assertNotNull(
"IncomingMessagesForwardingJmsBridge did not forward LoginRequest to JMS queue",
forwardedMessage);
assertEquals(
"IncomingMessagesForwardingJmsBridge did not forward LoginRequest but rather a different message",
message, forwardedMessage.getObject());
}
@Test
public final void assertThatLoginResponseReceivedForwardsLoginResponseToJmsQueue()
throws JMSException {
final DestinationManager destinationManager = new DestinationManager();
destinationManager.createQueue(DEFAULT_QUEUE_NAME);
final ConfigurationManager configurationManager = new ConfigurationManager();
final ConnectionFactory mockConnFactory = new MockQueueConnectionFactory(
destinationManager, configurationManager);
final JmsTemplate jmsTemplate = new JmsTemplate(mockConnFactory);
jmsTemplate.setDefaultDestinationName(DEFAULT_QUEUE_NAME);
jmsTemplate
.setMessageConverter(new WindowedMessageEventToJmsMessageConverter());
final IncomingMessagesForwardingJmsBridge<Integer> objectUnderTest = new IncomingMessagesForwardingJmsBridge<Integer>(
jmsTemplate);
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
replay(receivingChannel);
final LoginRequest loginRequest = new LoginRequest(
"assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue",
"assertThatLoginRequestReceivedForwardsLoginRequestToJmsQueue");
final LoginResponse message = LoginResponse.accept(loginRequest);
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, receivingChannel.getRemoteAddress());
final ReceivedLoginRequestAcknowledgementEvent<Integer> windowedMessageEvent = new ReceivedLoginRequestAcknowledgementEvent<Integer>(
messageReference, upstreamMessageEvent, message);
objectUnderTest.loginResponseReceived(windowedMessageEvent);
final ObjectMessage forwardedMessage = ObjectMessage.class
.cast(jmsTemplate.receive());
assertNotNull(
"IncomingMessagesForwardingJmsBridge did not forward LoginResponse to JMS queue",
forwardedMessage);
assertEquals(
"IncomingMessagesForwardingJmsBridge did not forward LoginResponse but rather a different message",
message, forwardedMessage.getObject());
}
@Test
public final void assertThatPingRequestReceivedDoesNotForwardPingRequestToJmsQueue()
throws JMSException {
final DestinationManager destinationManager = new DestinationManager();
destinationManager.createQueue(DEFAULT_QUEUE_NAME);
final ConfigurationManager configurationManager = new ConfigurationManager();
final ConnectionFactory mockConnFactory = new MockQueueConnectionFactory(
destinationManager, configurationManager);
final JmsTemplate jmsTemplate = new JmsTemplate(mockConnFactory);
jmsTemplate.setDefaultDestinationName(DEFAULT_QUEUE_NAME);
jmsTemplate
.setMessageConverter(new WindowedMessageEventToJmsMessageConverter());
final IncomingMessagesForwardingJmsBridge<Integer> objectUnderTest = new IncomingMessagesForwardingJmsBridge<Integer>(
jmsTemplate);
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
replay(receivingChannel);
final PingRequest message = new PingRequest();
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, receivingChannel.getRemoteAddress());
final ReceivedPingRequestEvent<Integer> windowedMessageEvent = new ReceivedPingRequestEvent<Integer>(
messageReference, upstreamMessageEvent, message);
objectUnderTest.pingRequestReceived(windowedMessageEvent);
final ObjectMessage forwardedMessage = ObjectMessage.class
.cast(jmsTemplate.receive());
assertNull(
"IncomingMessagesForwardingJmsBridge DID forward PingRequest to JMS queue - it shouldn't have done so",
forwardedMessage);
}
@Test
public final void assertThatPingResponseReceivedDoesNotForwardPingResponseToJmsQueue()
throws JMSException {
final DestinationManager destinationManager = new DestinationManager();
destinationManager.createQueue(DEFAULT_QUEUE_NAME);
final ConfigurationManager configurationManager = new ConfigurationManager();
final ConnectionFactory mockConnFactory = new MockQueueConnectionFactory(
destinationManager, configurationManager);
final JmsTemplate jmsTemplate = new JmsTemplate(mockConnFactory);
jmsTemplate.setDefaultDestinationName(DEFAULT_QUEUE_NAME);
jmsTemplate
.setMessageConverter(new WindowedMessageEventToJmsMessageConverter());
final IncomingMessagesForwardingJmsBridge<Integer> objectUnderTest = new IncomingMessagesForwardingJmsBridge<Integer>(
jmsTemplate);
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
replay(receivingChannel);
final PingRequest pingRequest = new PingRequest();
final PingResponse message = PingResponse.reject(pingRequest);
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, receivingChannel.getRemoteAddress());
final ReceivedPingRequestAcknowledgementEvent<Integer> windowedMessageEvent = new ReceivedPingRequestAcknowledgementEvent<Integer>(
messageReference, upstreamMessageEvent, message);
objectUnderTest.pingResponseReceived(windowedMessageEvent);
final ObjectMessage forwardedMessage = ObjectMessage.class
.cast(jmsTemplate.receive());
assertNull(
"IncomingMessagesForwardingJmsBridge DID forward PingResponse to JMS queue - it shouldn't have done so",
forwardedMessage);
}
}