package vnet.sms.common.wme.jmsbridge;
import static org.easymock.EasyMock.capture;
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 java.io.Serializable;
import java.net.InetSocketAddress;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.easymock.Capture;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.UpstreamMessageEvent;
import org.junit.Test;
import vnet.sms.common.messages.Headers;
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.MessageEventType;
import vnet.sms.common.wme.acknowledge.SendSmsAckContainer;
import vnet.sms.common.wme.acknowledge.SendSmsNackContainer;
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.common.wme.send.SendSmsContainer;
import com.mockrunner.mock.jms.MockObjectMessage;
import com.mockrunner.mock.jms.MockTextMessage;
public class WindowedMessageEventToJmsMessageConverterTest {
private final WindowedMessageEventToJmsMessageConverter objectUnderTest = new WindowedMessageEventToJmsMessageConverter();
@Test
public final void assertThatToMessageCorrectlyConvertsPingRequestReceivedEvent()
throws JMSException {
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Session jmsSession = createNiceMock(Session.class);
final Capture<Serializable> capturedMessage = new Capture<Serializable>();
expect(jmsSession.createObjectMessage(capture(capturedMessage)))
.andReturn(new RecordingJmsObjectMessage(capturedMessage));
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
final PingRequest message = new PingRequest();
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, sender);
final ReceivedPingRequestEvent<Integer> windowedMessageEvent = new ReceivedPingRequestEvent<Integer>(
messageReference, upstreamMessageEvent, message);
replay(jmsSession, receivingChannel);
final javax.jms.ObjectMessage convertedMessage = (ObjectMessage) this.objectUnderTest
.toMessage(windowedMessageEvent, jmsSession);
assertNotNull("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned null", convertedMessage);
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected payload",
message, convertedMessage.getObject());
// Verify headers
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected message reference",
windowedMessageEvent.getMessageReference(),
convertedMessage.getObjectProperty(Headers.MESSAGE_REFERENCE));
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected type header",
windowedMessageEvent.getMessageType().toString(),
convertedMessage.getStringProperty(Headers.EVENT_TYPE));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receive timestamp",
windowedMessageEvent.getMessage().getCreationTimestamp(),
convertedMessage.getLongProperty(Headers.RECEIVE_TIMESTAMP));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiver socket address",
windowedMessageEvent.getChannel().getLocalAddress().toString(),
convertedMessage
.getStringProperty(Headers.RECEIVER_SOCKET_ADDRESS));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiving channel id",
(int) windowedMessageEvent.getChannel().getId(),
convertedMessage.getIntProperty(Headers.RECEIVING_CHANNEL_ID));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected sender socket address",
windowedMessageEvent.getChannel().getRemoteAddress().toString(),
convertedMessage
.getStringProperty(Headers.SENDER_SOCKET_ADDRESS));
}
private static final class RecordingJmsObjectMessage implements
ObjectMessage {
private final Map<String, Object> properties = new HashMap<String, Object>();
private final Capture<Serializable> body;
RecordingJmsObjectMessage(final Capture<Serializable> message) {
this.body = message;
}
@Override
public void acknowledge() throws JMSException {
}
@Override
public void clearBody() throws JMSException {
this.body.reset();
}
@Override
public void clearProperties() throws JMSException {
this.properties.clear();
}
@Override
public boolean getBooleanProperty(final String arg0)
throws JMSException {
return Boolean.class.cast(this.properties.get(arg0));
}
@Override
public byte getByteProperty(final String arg0) throws JMSException {
return Byte.class.cast(this.properties.get(arg0));
}
@Override
public double getDoubleProperty(final String arg0) throws JMSException {
return Double.class.cast(this.properties.get(arg0));
}
@Override
public float getFloatProperty(final String arg0) throws JMSException {
return Float.class.cast(this.properties.get(arg0));
}
@Override
public int getIntProperty(final String arg0) throws JMSException {
return Integer.class.cast(this.properties.get(arg0));
}
@Override
public String getJMSCorrelationID() throws JMSException {
return null;
}
@Override
public byte[] getJMSCorrelationIDAsBytes() throws JMSException {
return null;
}
@Override
public int getJMSDeliveryMode() throws JMSException {
return 0;
}
@Override
public Destination getJMSDestination() throws JMSException {
return null;
}
@Override
public long getJMSExpiration() throws JMSException {
return 0;
}
@Override
public String getJMSMessageID() throws JMSException {
return null;
}
@Override
public int getJMSPriority() throws JMSException {
return 0;
}
@Override
public boolean getJMSRedelivered() throws JMSException {
return false;
}
@Override
public Destination getJMSReplyTo() throws JMSException {
return null;
}
@Override
public long getJMSTimestamp() throws JMSException {
return 0;
}
@Override
public String getJMSType() throws JMSException {
return null;
}
@Override
public long getLongProperty(final String arg0) throws JMSException {
return Long.class.cast(this.properties.get(arg0));
}
@Override
public Object getObjectProperty(final String arg0) throws JMSException {
return this.properties.get(arg0);
}
@Override
public Enumeration getPropertyNames() throws JMSException {
return null;
}
@Override
public short getShortProperty(final String arg0) throws JMSException {
return Short.class.cast(this.properties.get(arg0));
}
@Override
public String getStringProperty(final String arg0) throws JMSException {
return String.class.cast(this.properties.get(arg0));
}
@Override
public boolean propertyExists(final String arg0) throws JMSException {
return this.properties.containsKey(arg0);
}
@Override
public void setBooleanProperty(final String arg0, final boolean arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setByteProperty(final String arg0, final byte arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setDoubleProperty(final String arg0, final double arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setFloatProperty(final String arg0, final float arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setIntProperty(final String arg0, final int arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setJMSCorrelationID(final String arg0) throws JMSException {
}
@Override
public void setJMSCorrelationIDAsBytes(final byte[] arg0)
throws JMSException {
}
@Override
public void setJMSDeliveryMode(final int arg0) throws JMSException {
}
@Override
public void setJMSDestination(final Destination arg0)
throws JMSException {
}
@Override
public void setJMSExpiration(final long arg0) throws JMSException {
}
@Override
public void setJMSMessageID(final String arg0) throws JMSException {
}
@Override
public void setJMSPriority(final int arg0) throws JMSException {
}
@Override
public void setJMSRedelivered(final boolean arg0) throws JMSException {
}
@Override
public void setJMSReplyTo(final Destination arg0) throws JMSException {
}
@Override
public void setJMSTimestamp(final long arg0) throws JMSException {
}
@Override
public void setJMSType(final String arg0) throws JMSException {
}
@Override
public void setLongProperty(final String arg0, final long arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setObjectProperty(final String arg0, final Object arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setShortProperty(final String arg0, final short arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public void setStringProperty(final String arg0, final String arg1)
throws JMSException {
this.properties.put(arg0, arg1);
}
@Override
public Serializable getObject() throws JMSException {
return this.body.getValue();
}
@Override
public void setObject(final Serializable arg0) throws JMSException {
this.body.setValue(arg0);
}
}
@Test
public final void assertThatToMessageCorrectlyConvertsPingResponseReceivedEvent()
throws JMSException {
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Session jmsSession = createNiceMock(Session.class);
final Capture<Serializable> capturedMessage = new Capture<Serializable>();
expect(jmsSession.createObjectMessage(capture(capturedMessage)))
.andReturn(new RecordingJmsObjectMessage(capturedMessage));
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
final PingRequest pingRequest = new PingRequest();
final PingResponse message = PingResponse.accept(pingRequest);
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, sender);
final ReceivedPingRequestAcknowledgementEvent<Integer> windowedMessageEvent = new ReceivedPingRequestAcknowledgementEvent<Integer>(
messageReference, upstreamMessageEvent, message);
replay(jmsSession, receivingChannel);
final javax.jms.ObjectMessage convertedMessage = (ObjectMessage) this.objectUnderTest
.toMessage(windowedMessageEvent, jmsSession);
assertNotNull("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned null", convertedMessage);
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected payload",
message, convertedMessage.getObject());
// Verify headers
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected message reference",
windowedMessageEvent.getMessageReference(),
convertedMessage.getObjectProperty(Headers.MESSAGE_REFERENCE));
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected type header",
windowedMessageEvent.getMessageType().toString(),
convertedMessage.getStringProperty(Headers.EVENT_TYPE));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receive timestamp",
windowedMessageEvent.getMessage().getCreationTimestamp(),
convertedMessage.getLongProperty(Headers.RECEIVE_TIMESTAMP));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiver socket address",
windowedMessageEvent.getChannel().getLocalAddress().toString(),
convertedMessage
.getStringProperty(Headers.RECEIVER_SOCKET_ADDRESS));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiving channel id",
(int) windowedMessageEvent.getChannel().getId(),
convertedMessage.getIntProperty(Headers.RECEIVING_CHANNEL_ID));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected sender socket address",
windowedMessageEvent.getChannel().getRemoteAddress().toString(),
convertedMessage
.getStringProperty(Headers.SENDER_SOCKET_ADDRESS));
}
@Test
public final void assertThatToMessageCorrectlyConvertsLoginRequestReceivedEvent()
throws JMSException {
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Session jmsSession = createNiceMock(Session.class);
final Capture<Serializable> capturedMessage = new Capture<Serializable>();
expect(jmsSession.createObjectMessage(capture(capturedMessage)))
.andReturn(new RecordingJmsObjectMessage(capturedMessage));
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
final LoginRequest message = new LoginRequest(
"assertThatToMessageCorrectlyConvertsLoginRequestReceivedEvent",
"assertThatToMessageCorrectlyConvertsLoginRequestReceivedEvent");
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, sender);
final ReceivedLoginRequestEvent<Integer> windowedMessageEvent = new ReceivedLoginRequestEvent<Integer>(
messageReference, upstreamMessageEvent, message);
replay(jmsSession, receivingChannel);
final javax.jms.ObjectMessage convertedMessage = (ObjectMessage) this.objectUnderTest
.toMessage(windowedMessageEvent, jmsSession);
assertNotNull("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned null", convertedMessage);
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected payload",
message, convertedMessage.getObject());
// Verify headers
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected message reference",
windowedMessageEvent.getMessageReference(),
convertedMessage.getObjectProperty(Headers.MESSAGE_REFERENCE));
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected type header",
windowedMessageEvent.getMessageType().toString(),
convertedMessage.getStringProperty(Headers.EVENT_TYPE));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receive timestamp",
windowedMessageEvent.getMessage().getCreationTimestamp(),
convertedMessage.getLongProperty(Headers.RECEIVE_TIMESTAMP));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiver socket address",
windowedMessageEvent.getChannel().getLocalAddress().toString(),
convertedMessage
.getStringProperty(Headers.RECEIVER_SOCKET_ADDRESS));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiving channel id",
(int) windowedMessageEvent.getChannel().getId(),
convertedMessage.getIntProperty(Headers.RECEIVING_CHANNEL_ID));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected sender socket address",
windowedMessageEvent.getChannel().getRemoteAddress().toString(),
convertedMessage
.getStringProperty(Headers.SENDER_SOCKET_ADDRESS));
}
@Test
public final void assertThatToMessageCorrectlyConvertsLoginResponseReceivedEvent()
throws JMSException {
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Session jmsSession = createNiceMock(Session.class);
final Capture<Serializable> capturedMessage = new Capture<Serializable>();
expect(jmsSession.createObjectMessage(capture(capturedMessage)))
.andReturn(new RecordingJmsObjectMessage(capturedMessage));
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
final LoginRequest loginRequest = new LoginRequest(
"assertThatToMessageCorrectlyConvertsLoginRequestRejectedEvent",
"assertThatToMessageCorrectlyConvertsLoginRequestRejectedEvent");
final LoginResponse message = LoginResponse.reject(loginRequest);
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, sender);
final ReceivedLoginRequestAcknowledgementEvent<Integer> windowedMessageEvent = new ReceivedLoginRequestAcknowledgementEvent<Integer>(
messageReference, upstreamMessageEvent, message);
replay(jmsSession, receivingChannel);
final javax.jms.ObjectMessage convertedMessage = (ObjectMessage) this.objectUnderTest
.toMessage(windowedMessageEvent, jmsSession);
assertNotNull("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned null", convertedMessage);
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected payload",
message, convertedMessage.getObject());
// Verify headers
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected message reference",
windowedMessageEvent.getMessageReference(),
convertedMessage.getObjectProperty(Headers.MESSAGE_REFERENCE));
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected type header",
windowedMessageEvent.getMessageType().toString(),
convertedMessage.getStringProperty(Headers.EVENT_TYPE));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receive timestamp",
windowedMessageEvent.getMessage().getCreationTimestamp(),
convertedMessage.getLongProperty(Headers.RECEIVE_TIMESTAMP));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiver socket address",
windowedMessageEvent.getChannel().getLocalAddress().toString(),
convertedMessage
.getStringProperty(Headers.RECEIVER_SOCKET_ADDRESS));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiving channel id",
(int) windowedMessageEvent.getChannel().getId(),
convertedMessage.getIntProperty(Headers.RECEIVING_CHANNEL_ID));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected sender socket address",
windowedMessageEvent.getChannel().getRemoteAddress().toString(),
convertedMessage
.getStringProperty(Headers.SENDER_SOCKET_ADDRESS));
}
@Test
public final void assertThatToMessageCorrectlyConvertsSmsReceivedEvent()
throws JMSException {
final InetSocketAddress sender = new InetSocketAddress(1);
final InetSocketAddress receiver = new InetSocketAddress(2);
final Integer channelId = 123;
final Integer messageReference = 78;
final Session jmsSession = createNiceMock(Session.class);
final Capture<Serializable> capturedMessage = new Capture<Serializable>();
expect(jmsSession.createObjectMessage(capture(capturedMessage)))
.andReturn(new RecordingJmsObjectMessage(capturedMessage));
final Channel receivingChannel = createNiceMock(Channel.class);
expect(receivingChannel.getRemoteAddress()).andReturn(sender)
.anyTimes();
expect(receivingChannel.getLocalAddress()).andReturn(receiver)
.anyTimes();
expect(receivingChannel.getId()).andReturn(channelId).anyTimes();
final Sms message = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatToMessageCorrectlyConvertsSmsReceivedEvent");
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
receivingChannel, message, sender);
final ReceivedSmsEvent<Integer> windowedMessageEvent = new ReceivedSmsEvent<Integer>(
messageReference, upstreamMessageEvent, message);
replay(jmsSession, receivingChannel);
final javax.jms.ObjectMessage convertedMessage = (ObjectMessage) this.objectUnderTest
.toMessage(windowedMessageEvent, jmsSession);
assertNotNull("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned null", convertedMessage);
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected payload",
message, convertedMessage.getObject());
// Verify headers
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected message reference",
windowedMessageEvent.getMessageReference(),
convertedMessage.getObjectProperty(Headers.MESSAGE_REFERENCE));
assertEquals("toMessage(" + windowedMessageEvent + ", " + jmsSession
+ ") returned a message NOT having the expected type header",
windowedMessageEvent.getMessageType().toString(),
convertedMessage.getStringProperty(Headers.EVENT_TYPE));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receive timestamp",
windowedMessageEvent.getMessage().getCreationTimestamp(),
convertedMessage.getLongProperty(Headers.RECEIVE_TIMESTAMP));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiver socket address",
windowedMessageEvent.getChannel().getLocalAddress().toString(),
convertedMessage
.getStringProperty(Headers.RECEIVER_SOCKET_ADDRESS));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected receiving channel id",
(int) windowedMessageEvent.getChannel().getId(),
convertedMessage.getIntProperty(Headers.RECEIVING_CHANNEL_ID));
assertEquals(
"toMessage("
+ windowedMessageEvent
+ ", "
+ jmsSession
+ ") returned a message NOT having the expected sender socket address",
windowedMessageEvent.getChannel().getRemoteAddress().toString(),
convertedMessage
.getStringProperty(Headers.SENDER_SOCKET_ADDRESS));
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsNullJmsMessage()
throws JMSException {
this.objectUnderTest.fromMessage(null);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsTextMessage()
throws JMSException {
final TextMessage textMessage = new MockTextMessage();
this.objectUnderTest.fromMessage(textMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsObjectMessageWithoutMessageTypeHeader()
throws JMSException {
final ObjectMessage objectMessage = new MockObjectMessage();
this.objectUnderTest.fromMessage(objectMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsSmsMessageWithoutPayload()
throws JMSException {
final ObjectMessage smsMessage = new MockObjectMessage();
smsMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS.name());
this.objectUnderTest.fromMessage(smsMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsSmsMessageWithWrongPayload()
throws JMSException {
final ObjectMessage smsMessage = new MockObjectMessage(
"assertThatFromMessageRejectsSmsMessageWithWrongPayload");
smsMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS.name());
this.objectUnderTest.fromMessage(smsMessage);
}
@Test
public final void assertThatFromMessageCorrectlyConvertsSendSmsMessage()
throws JMSException {
final Sms sms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageCorrectlyConvertsSendSmsMessage");
final ObjectMessage smsMessage = new MockObjectMessage(sms);
smsMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS.name());
final Object converted = this.objectUnderTest.fromMessage(smsMessage);
assertEquals("fromMessage(" + smsMessage
+ ") did not produce converted message of expected type",
SendSmsContainer.class, converted.getClass());
assertEquals(
"fromMessage("
+ smsMessage
+ ") did not produce SendSmsContainer with the original SMS as its payload",
sms, SendSmsContainer.class.cast(converted).getMessage());
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsAckMessageWithWrongPayload()
throws JMSException {
final ObjectMessage receivedSmsAckedMessage = new MockObjectMessage(
"assertThatFromMessageRejectsReceivedSmsAckMessageWithWrongPayload");
receivedSmsAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_ACK.name());
this.objectUnderTest.fromMessage(receivedSmsAckedMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsAckedMessageWithoutReceivingChannelId()
throws JMSException {
final Sms ackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsAckMessageWithoutReceivingChannelId");
final ObjectMessage receivedSmsAckedMessage = new MockObjectMessage(
ackedSms);
receivedSmsAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_ACK.name());
receivedSmsAckedMessage.setObjectProperty(Headers.MESSAGE_REFERENCE,
"1");
this.objectUnderTest.fromMessage(receivedSmsAckedMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsAckedMessageWithoutMessageReference()
throws JMSException {
final Sms ackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsAckedMessageWithoutMessageReference");
final ObjectMessage receivedSmsAckedMessage = new MockObjectMessage(
ackedSms);
receivedSmsAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_ACK.name());
receivedSmsAckedMessage.setIntProperty(Headers.RECEIVING_CHANNEL_ID, 1);
this.objectUnderTest.fromMessage(receivedSmsAckedMessage);
}
@Test
public final void assertThatFromMessageCorrectlyConvertsReceivedSmsAckedMessage()
throws JMSException {
final int receivingChannelId = 1;
final String messageReference = "1";
final Sms ackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageCorrectlyConvertsReceivedSmsAckedMessage");
final ObjectMessage receivedSmsAckedMessage = new MockObjectMessage(
ackedSms);
receivedSmsAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_ACK.name());
receivedSmsAckedMessage.setObjectProperty(Headers.MESSAGE_REFERENCE,
messageReference);
receivedSmsAckedMessage.setIntProperty(Headers.RECEIVING_CHANNEL_ID,
receivingChannelId);
final Object converted = this.objectUnderTest
.fromMessage(receivedSmsAckedMessage);
assertEquals("fromMessage(" + receivedSmsAckedMessage
+ ") did not produce converted message of expected type",
SendSmsAckContainer.class, converted.getClass());
final SendSmsAckContainer<?> casted = SendSmsAckContainer.class
.cast(converted);
assertEquals(
"fromMessage("
+ receivedSmsAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original SMS as its payload",
ackedSms, casted.getAcknowledgedMessage());
assertEquals(
"fromMessage("
+ receivedSmsAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original GsmPdu Reference",
messageReference, casted.getAcknowledgedMessageReference());
assertEquals(
"fromMessage("
+ receivedSmsAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original receiving channel id",
receivingChannelId, casted.getReceivingChannelId());
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutReceivingChannelId()
throws JMSException {
final Sms nackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutReceivingChannelId");
final ObjectMessage receivedSmsNAckedMessage = new MockObjectMessage(
nackedSms);
receivedSmsNAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_NACK.name());
receivedSmsNAckedMessage.setObjectProperty(Headers.MESSAGE_REFERENCE,
"1");
receivedSmsNAckedMessage.setIntProperty(Headers.ERROR_KEY, 1);
receivedSmsNAckedMessage
.setObjectProperty(Headers.ERROR_DESCRIPTION,
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutReceivingChannelId");
this.objectUnderTest.fromMessage(receivedSmsNAckedMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutMessageReference()
throws JMSException {
final Sms nackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutMessageReference");
final ObjectMessage receivedSmsNAckedMessage = new MockObjectMessage(
nackedSms);
receivedSmsNAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_NACK.name());
receivedSmsNAckedMessage
.setIntProperty(Headers.RECEIVING_CHANNEL_ID, 1);
receivedSmsNAckedMessage.setIntProperty(Headers.ERROR_KEY, 1);
receivedSmsNAckedMessage
.setObjectProperty(Headers.ERROR_DESCRIPTION,
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutMessageReference");
this.objectUnderTest.fromMessage(receivedSmsNAckedMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorCode()
throws JMSException {
final Sms nackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorCode");
final ObjectMessage receivedSmsNAckedMessage = new MockObjectMessage(
nackedSms);
receivedSmsNAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_NACK.name());
receivedSmsNAckedMessage
.setIntProperty(Headers.RECEIVING_CHANNEL_ID, 1);
receivedSmsNAckedMessage
.setObjectProperty(Headers.MESSAGE_REFERENCE,
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorCode");
receivedSmsNAckedMessage
.setObjectProperty(Headers.ERROR_DESCRIPTION,
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorCode");
this.objectUnderTest.fromMessage(receivedSmsNAckedMessage);
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorDescription()
throws JMSException {
final Sms nackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorDescription");
final ObjectMessage receivedSmsNAckedMessage = new MockObjectMessage(
nackedSms);
receivedSmsNAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_NACK.name());
receivedSmsNAckedMessage
.setIntProperty(Headers.RECEIVING_CHANNEL_ID, 1);
receivedSmsNAckedMessage
.setObjectProperty(Headers.MESSAGE_REFERENCE,
"assertThatFromMessageRejectsReceivedSmsNAckedMessageWithoutErrorDescription");
receivedSmsNAckedMessage.setIntProperty(Headers.ERROR_KEY, 1);
this.objectUnderTest.fromMessage(receivedSmsNAckedMessage);
}
@Test
public final void assertThatFromMessageCorrectlyConvertsReceivedSmsNAckedMessage()
throws JMSException {
final int receivingChannelId = 1;
final String messageReference = "1";
final int errorKey = 55;
final String errorDescription = "assertThatFromMessageCorrectlyConvertsReceivedSmsNAckedMessage";
final Sms nackedSms = new Sms(new Msisdn("01701690056"), new Msisdn(
"01701690056"),
"assertThatFromMessageCorrectlyConvertsReceivedSmsNAckedMessage");
final ObjectMessage receivedSmsNAckedMessage = new MockObjectMessage(
nackedSms);
receivedSmsNAckedMessage.setStringProperty(Headers.EVENT_TYPE,
MessageEventType.SEND_SMS_NACK.name());
receivedSmsNAckedMessage.setObjectProperty(Headers.MESSAGE_REFERENCE,
messageReference);
receivedSmsNAckedMessage.setIntProperty(Headers.RECEIVING_CHANNEL_ID,
receivingChannelId);
receivedSmsNAckedMessage.setIntProperty(Headers.ERROR_KEY, errorKey);
receivedSmsNAckedMessage.setObjectProperty(Headers.ERROR_DESCRIPTION,
errorDescription);
final Object converted = this.objectUnderTest
.fromMessage(receivedSmsNAckedMessage);
assertEquals("fromMessage(" + receivedSmsNAckedMessage
+ ") did not produce converted message of expected type",
SendSmsNackContainer.class, converted.getClass());
final SendSmsNackContainer<?> casted = SendSmsNackContainer.class
.cast(converted);
assertEquals(
"fromMessage("
+ receivedSmsNAckedMessage
+ ") did not produce ReceivedMessageNackedContainer with the original SMS as its payload",
nackedSms, casted.getAcknowledgedMessage());
assertEquals(
"fromMessage("
+ receivedSmsNAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original GsmPdu Reference",
messageReference, casted.getAcknowledgedMessageReference());
assertEquals(
"fromMessage("
+ receivedSmsNAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original receiving channel id",
receivingChannelId, casted.getReceivingChannelId());
assertEquals(
"fromMessage("
+ receivedSmsNAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original error key",
errorKey, casted.getErrorKey());
assertEquals(
"fromMessage("
+ receivedSmsNAckedMessage
+ ") did not produce ReceivedMessageAckedContainer with the original error description",
errorDescription, casted.getErrorDescription());
}
}