package com.tacitknowledge.slowlight.proxyserver.server.proxy; import com.tacitknowledge.slowlight.proxyserver.config.ServerConfig; import io.netty.channel.Channel; import io.netty.channel.ChannelConfig; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static com.tacitknowledge.slowlight.proxyserver.server.proxy.ProxyChannelInitializer.*; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; /** * @author Pavel Sorocun (psorocun@tacitknowledge.com) */ @RunWith(MockitoJUnitRunner.class) public class ProxyChannelInitializerTest { @Mock private EventLoopGroup clientWorkerGroup; @Mock private Channel channel; @Mock private ChannelConfig channelConfig; @Mock private ServerConfig serverConfig; @Mock private ChannelPipeline pipeline; private ProxyChannelInitializer initializer; @Before public void setup() { when(channel.config()).thenReturn(channelConfig); when(channel.pipeline()).thenReturn(pipeline); when(serverConfig.getParam(PARAM_HOST)).thenReturn("host"); when(serverConfig.getParam(PARAM_PORT)).thenReturn("8000"); initializer = new ProxyChannelInitializer(serverConfig, clientWorkerGroup); } @Test public void shouldInitializeChannel() throws Exception { ArgumentCaptor<String> handlerNameCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<ProxyChannelHandler> handler = ArgumentCaptor.forClass(ProxyChannelHandler.class); initializer.initChannel(channel); verify(channelConfig, times(1)).setAutoRead(false); verify(pipeline).addLast(handlerNameCaptor.capture(), handler.capture()); assertThat(PROXY_HANDLER_NAME, equalTo(handlerNameCaptor.getValue())); final String actualHost = handler.getValue().getTargetHost(); final String actualPort = String.valueOf(handler.getValue().getTargetPort()); assertThat(serverConfig.getParam(PARAM_HOST), equalTo(actualHost)); assertThat(serverConfig.getParam(PARAM_PORT), equalTo(actualPort)); } }