package com.tacitknowledge.slowlight.proxyserver.server; import com.tacitknowledge.slowlight.proxyserver.config.HandlerConfig; import com.tacitknowledge.slowlight.proxyserver.config.ServerConfig; import com.tacitknowledge.slowlight.proxyserver.handler.AbstractChannelHandler; import io.netty.channel.Channel; import io.netty.channel.ChannelPipeline; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.Arrays; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; /** * @author Alexandr Donciu (adonciu@tacitknowledge.com) */ @RunWith(MockitoJUnitRunner.class) public class DynamicChannelInitializerTest { @Mock private ServerConfig serverConfig; @Mock private Channel channel; @Mock private ChannelPipeline pipeline; private DynamicChannelInitializer dynamicChannelInitializer; @Before public void setup() { doReturn(pipeline).when(channel).pipeline(); dynamicChannelInitializer = spy(new DynamicChannelInitializer(serverConfig)); } @Test public void channelInitializerShouldAddConfiguredHandlersToPipeline() throws Exception { final HandlerConfig handlerConfig1 = mock(HandlerConfig.class); final HandlerConfig handlerConfig2 = mock(HandlerConfig.class); doReturn("logHandler").when(handlerConfig1).getName(); doReturn("delayHandler").when(handlerConfig2).getName(); doReturn(Arrays.asList(handlerConfig1, handlerConfig2)).when(serverConfig).getHandlers(); final AbstractChannelHandler handler1 = mock(AbstractChannelHandler.class); final AbstractChannelHandler handler2 = mock(AbstractChannelHandler.class); doReturn(handler1).when(dynamicChannelInitializer).createChannelHandler(handlerConfig1); doReturn(handler2).when(dynamicChannelInitializer).createChannelHandler(handlerConfig2); dynamicChannelInitializer.initChannel(channel); final InOrder inOrder = inOrder(pipeline); inOrder.verify(pipeline).addFirst(handlerConfig2.getName(), handler2); inOrder.verify(pipeline).addFirst(handlerConfig1.getName(), handler1); } }