package vnet.sms.gateway.server.framework.channel; import static org.easymock.EasyMock.createNiceMock; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.jboss.netty.channel.group.DefaultChannelGroup; import org.jboss.netty.handler.codec.serialization.ClassResolvers; import org.jboss.netty.handler.codec.serialization.ObjectDecoder; import org.jboss.netty.handler.codec.serialization.ObjectEncoder; import org.junit.Test; import org.springframework.jmx.export.MBeanExporter; import org.springframework.security.authentication.AuthenticationManager; import vnet.sms.common.messages.GsmPdu; import vnet.sms.gateway.nettysupport.monitor.incoming.InitialChannelEventsMonitor; import vnet.sms.gateway.nettysupport.window.spi.MessageReferenceGenerator; import vnet.sms.gateway.server.framework.internal.channel.GatewayServerChannelPipelineFactory; import vnet.sms.gateway.server.framework.internal.channel.GatewayServerChannelPipelineFactoryBuilder; import vnet.sms.gateway.server.framework.internal.jmsbridge.IncomingMessagesForwardingJmsBridge; import vnet.sms.gateway.transport.spi.DefaultTransportProtocolPlugin; import vnet.sms.gateway.transport.spi.TransportProtocolPlugin; import vnet.sms.gateway.transports.serialization.ReferenceableMessageContainer; import vnet.sms.gateway.transports.serialization.incoming.SerializationTransportProtocolAdaptingUpstreamChannelHandler; import vnet.sms.gateway.transports.serialization.outgoing.SerializationTransportProtocolAdaptingDownstreamChannelHandler; import com.yammer.metrics.Metrics; public class GatewayServerChannelPipelineFactoryBuilderTest { @Test(expected = IllegalStateException.class) public final void assertThatGetObjectThrowsIllegalStateExceptionIfAfterPropertiesSetHasNotBeenCalledBefore() throws Exception { final GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu> objectUnderTest = new GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu>(); objectUnderTest.getObject(); } @Test public final void assertThatGetObjectTypeReturnsTypeCompatibleWithGatewayServerChannelPipelineFactory() { final GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu> objectUnderTest = new GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu>(); final Class<?> objectType = objectUnderTest.getObjectType(); assertTrue( "getObjectType() should have returned a type that is compatible with " + GatewayServerChannelPipelineFactory.class + ", yet it didn't", GatewayServerChannelPipelineFactory.class .isAssignableFrom(objectType)); } @Test public final void assertThatIsSingletonReturnsTrue() { final GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu> objectUnderTest = new GatewayServerChannelPipelineFactoryBuilder<Integer, GsmPdu>(); assertTrue( "isSingleton() should have returned true since a GatewayServerChannelPipelineFactory is a singleton", objectUnderTest.isSingleton()); } @Test public final void assertThatAfterPropertiesSetProperlyConstructsAGatewayServerChannelPipelineFactoryIfBuilderIsCorrectlyConfigured() throws Exception { final TransportProtocolPlugin<Integer, ReferenceableMessageContainer> transportProtocolPlugin = new DefaultTransportProtocolPlugin<Integer, ReferenceableMessageContainer>( ReferenceableMessageContainer.class, new ObjectDecoder(ClassResolvers.cacheDisabled(null)), null, new ObjectEncoder(), new SerializationTransportProtocolAdaptingUpstreamChannelHandler(), new SerializationTransportProtocolAdaptingDownstreamChannelHandler(), createNiceMock(MessageReferenceGenerator.class)); final GatewayServerChannelPipelineFactoryBuilder<Integer, ReferenceableMessageContainer> objectUnderTest = new GatewayServerChannelPipelineFactoryBuilder<Integer, ReferenceableMessageContainer>(); objectUnderTest.plugin(transportProtocolPlugin); objectUnderTest .setGatewayServerInstanceId("assertThatAfterPropertiesSetProperlyConstructsAGatewayServerChannelPipelineFactoryIfBuilderIsCorrectlyConfigured"); objectUnderTest .setAuthenticationManager(createNiceMock(AuthenticationManager.class)); objectUnderTest.setAvailableIncomingWindows(10); objectUnderTest .setMessageForwardingJmsBridge(createNiceMock(IncomingMessagesForwardingJmsBridge.class)); objectUnderTest.setFailedLoginResponseDelayMillis(2000L); objectUnderTest.setIncomingWindowWaitTimeMillis(1000L); objectUnderTest.setMBeanExportOperations(new MBeanExporter()); objectUnderTest.setPingIntervalSeconds(2); objectUnderTest.setPingResponseTimeoutMillis(3000L); objectUnderTest .setInitialChannelEventsMonitor(new InitialChannelEventsMonitor()); objectUnderTest.setAllConnectedChannels(new DefaultChannelGroup()); objectUnderTest.setMetricsRegistry(Metrics.defaultRegistry()); objectUnderTest.afterPropertiesSet(); final GatewayServerChannelPipelineFactory<Integer, ReferenceableMessageContainer> product = objectUnderTest .getObject(); assertNotNull( "afterPropertiesSet() should have built a proper GatewayServerChannelPipelineFactory", product); } }