package vnet.sms.gateway.nettysupport.transport.outgoing; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.DownstreamMessageEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelDownstreamHandler; import org.junit.Test; import vnet.sms.common.messages.GsmPdu; import vnet.sms.common.messages.PingRequest; import vnet.sms.common.wme.WindowedMessageEvent; import vnet.sms.common.wme.send.SendPingRequestEvent; import vnet.sms.gateway.nettysupport.test.ObjectSerializationTransportProtocolAdaptingDownstreamChannelHandler; import vnet.sms.gateway.nettytest.embedded.ChannelPipelineEmbedder; import vnet.sms.gateway.nettytest.embedded.DefaultChannelPipelineEmbedder; public class TransportProtocolAdaptingDownstreamChannelHandlerTest { private final TransportProtocolAdaptingDownstreamChannelHandler<Integer, GsmPdu> objectUnderTest = new ObjectSerializationTransportProtocolAdaptingDownstreamChannelHandler(); @Test public final void assertThatTransportProtocolAdapterCorrectlyConvertsPingRequestToPdu() throws Throwable { final ChannelPipelineEmbedder embeddedPipeline = new DefaultChannelPipelineEmbedder( this.objectUnderTest, new MessageEventWrappingDownstreamChannelHandler()); embeddedPipeline.connectChannel(); embeddedPipeline.send(new PingRequest()); final MessageEvent convertedMessageEvent = embeddedPipeline .downstreamMessageEvents().nextMessageEvent(); assertNotNull( "OutgoingMessagesMonitoringChannelHandler converted PingRequest to null output", convertedMessageEvent); assertEquals( "OutgoingMessagesMonitoringChannelHandler did not wrap converted PingRequest in DownstreamMessageEvent", DownstreamMessageEvent.class, convertedMessageEvent.getClass()); } private static class MessageEventWrappingDownstreamChannelHandler extends SimpleChannelDownstreamHandler { MessageEventWrappingDownstreamChannelHandler() { } @Override public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent e) throws Exception { final WindowedMessageEvent<Integer, ?> result; final Object message = e.getMessage(); if (message instanceof PingRequest) { result = new SendPingRequestEvent<Integer>(Integer.valueOf(1), e.getChannel(), (PingRequest) message); } else { throw new IllegalArgumentException("Unsupported message type: " + message); } ctx.sendDownstream(result); } } }