package com.tacitknowledge.slowlight.proxyserver.handler; import com.tacitknowledge.slowlight.proxyserver.config.HandlerConfig; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFutureListener; import io.netty.util.Timeout; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * @author Pavel Sorocun (psorocun@tacitknowledge.com) */ @RunWith(MockitoJUnitRunner.class) public class AbstractChannelHandlerTest extends BaseChannelHandlerTest { private class AbstractChannelHandlerTestable extends AbstractChannelHandler { public AbstractChannelHandlerTestable(HandlerConfig handlerConfig) { super(handlerConfig); } } private AbstractChannelHandlerTestable handler; @Before public void setup() { super.setup(); handler = spy(new AbstractChannelHandlerTestable(handlerConfig)); } @Test public void shouldCatchException() throws Exception { handler.exceptionCaught(channelHandlerContext, mock(Exception.class)); verify(handler, times(1)).closeOnFlush(channel); } @Test public void shouldCloseOnFlush() { when(channel.isActive()).thenReturn(Boolean.TRUE); handler.closeOnFlush(channel); verify(channel, times(1)).writeAndFlush(Unpooled.EMPTY_BUFFER); verify(channelFuture, times(1)).addListener(ChannelFutureListener.CLOSE); } @Test public void shouldReturnTimeFrame() { final String timeFrameProp = "100"; when(handlerConfig.getParam(AbstractChannelHandler.TIME_FRAME, false)).thenReturn(timeFrameProp); assertEquals(handler.getTimeFrame(), Long.parseLong(timeFrameProp)); } @Test public void shouldReturnDefaultTimeFrame() { when(handlerConfig.getParam(AbstractChannelHandler.TIME_FRAME, false)).thenReturn(null); assertEquals(handler.getTimeFrame(), AbstractChannelHandler.ZERO_TIME_FRAME); } @Test public void shouldRunTimeFrameTask() throws Exception { final AbstractChannelHandlerTestable handler = spy(new AbstractChannelHandlerTestable(handlerConfig)); final AbstractChannelHandlerTestable.TimeFrameTask task = spy(handler.new TimeFrameTask()); final Timeout timeout = mock(Timeout.class); doNothing().when(task).schedule(); task.run(timeout); verify(handler, times(1)).evaluateBehaviorFunctions(); verify(handler, times(1)).timerCallback(); verify(task, times(1)).schedule(); } @Test public void shouldStartTimeFrameTask() { final AbstractChannelHandlerTestable handler = spy(new AbstractChannelHandlerTestable(handlerConfig)); final AbstractChannelHandlerTestable.TimeFrameTask task = spy(handler.new TimeFrameTask()); doReturn(10L).when(handler).getTimeFrame(); task.start(); assertTrue(task.timer != null); verify(task, times(1)).schedule(); } }