package vnet.sms.gateway.nettysupport.transport.incoming;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.net.InetSocketAddress;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.UpstreamMessageEvent;
import org.junit.Test;
import vnet.sms.common.messages.GsmPdu;
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.WindowedMessageEvent;
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;
public class UpstreamMessageEventToWindowedMessageEventConverterTest {
@Test
public final void assertThatConvertConvertsLoginRequestToLoginRequestReceivedEvent() {
final LoginRequest inputMessage = new LoginRequest(
"assertThatConvertConvertsLoginRequestToLoginRequestReceivedEvent",
"secret");
final Class<?> expectedOutputType = ReceivedLoginRequestEvent.class;
assertCorrectConversion(inputMessage, expectedOutputType);
}
private void assertCorrectConversion(final GsmPdu inputMessage,
final Class<?> expectedOutputType) {
final Integer messageReference = Integer.valueOf(1);
final UpstreamMessageEvent upstreamMessageEvent = newUpstreamMessageEvent(inputMessage);
final WindowedMessageEvent<Integer, ? extends GsmPdu> convertedMessage = UpstreamMessageEventToWindowedMessageEventConverter.INSTANCE
.convert(messageReference, upstreamMessageEvent, inputMessage);
assertNotNull("convert(" + messageReference + ", "
+ upstreamMessageEvent + ", " + inputMessage
+ ") returned null", convertedMessage);
assertEquals("convert(" + messageReference + ", "
+ upstreamMessageEvent + ", " + inputMessage
+ ") returned wrong message event type", expectedOutputType,
convertedMessage.getClass());
}
private UpstreamMessageEvent newUpstreamMessageEvent(final GsmPdu gsmPdu) {
final Channel mockChannel = createNiceMock(Channel.class);
replay(mockChannel);
final UpstreamMessageEvent upstreamMessageEvent = new UpstreamMessageEvent(
mockChannel, gsmPdu, new InetSocketAddress(1));
return upstreamMessageEvent;
}
@Test
public final void assertThatConvertConvertsLoginResponseToLoginResponseReceivedEvent() {
final LoginResponse inputMessage = LoginResponse
.accept(new LoginRequest(
"assertThatConvertConvertsLoginResponseToLoginResponseReceivedEvent",
"secret"));
final Class<?> expectedOutputType = ReceivedLoginRequestAcknowledgementEvent.class;
assertCorrectConversion(inputMessage, expectedOutputType);
}
@Test
public final void assertThatConvertConvertsPingRequestToPingRequestReceivedEvent() {
final PingRequest inputMessage = new PingRequest();
final Class<?> expectedOutputType = ReceivedPingRequestEvent.class;
assertCorrectConversion(inputMessage, expectedOutputType);
}
@Test
public final void assertThatConvertConvertsPingResponseToPingResponseReceivedEvent() {
final PingResponse inputMessage = PingResponse
.accept(new PingRequest());
final Class<?> expectedOutputType = ReceivedPingRequestAcknowledgementEvent.class;
assertCorrectConversion(inputMessage, expectedOutputType);
}
@Test
public final void assertThatConvertConvertsSmsToSmsReceivedEvent() {
final Sms inputMessage = new Sms(new Msisdn("01686754432"), new Msisdn(
"01686754432"),
"assertThatConvertConvertsSmsToSmsReceivedEvent");
final Class<?> expectedOutputType = ReceivedSmsEvent.class;
assertCorrectConversion(inputMessage, expectedOutputType);
}
}