package cc.blynk.server.hardware.handlers; import cc.blynk.server.core.model.DashBoard; import cc.blynk.server.core.model.Profile; import cc.blynk.server.core.model.auth.User; import cc.blynk.server.core.protocol.model.messages.hardware.BlynkInternalMessage; import cc.blynk.server.core.session.HardwareStateHolder; import cc.blynk.server.hardware.handlers.hardware.logic.BlynkInternalLogic; import cc.blynk.utils.ServerProperties; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPipeline; import io.netty.handler.timeout.ReadTimeoutHandler; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.Collections; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 04.12.15. */ @RunWith(MockitoJUnitRunner.class) public class BlynkInternalLogicTest { ServerProperties props = new ServerProperties(Collections.emptyMap()); @Mock private ChannelHandlerContext ctx; @Mock private ChannelPipeline pipeline; @Mock private ByteBufAllocator allocator; @Mock private ByteBuf byteBuf; @Test public void testCorrectBehavior() { BlynkInternalLogic logic = new BlynkInternalLogic(props.getIntProperty("hard.socket.idle.timeout", 0)); when(ctx.pipeline()).thenReturn(pipeline); when(ctx.alloc()).thenReturn(allocator); when(allocator.ioBuffer(anyInt())).thenReturn(byteBuf); when(byteBuf.writeByte(eq(0))).thenReturn(byteBuf); when(byteBuf.writeShort(eq(1))).thenReturn(byteBuf); when(byteBuf.writeShort(eq(200))).thenReturn(byteBuf); User user = new User(); user.profile = new Profile(); DashBoard dashBoard = new DashBoard(); dashBoard.id = 1; user.profile.dashBoards = new DashBoard[] {dashBoard}; HardwareStateHolder hardwareStateHolder = new HardwareStateHolder(1, 0, user, null); BlynkInternalMessage hardwareInfoLogic = new BlynkInternalMessage(1, "ver 0.3.2-beta h-beat 60 buff-in 256 dev ESP8266".replaceAll(" ", "\0")); logic.messageReceived(ctx, hardwareStateHolder, hardwareInfoLogic); verify(pipeline).remove(ReadTimeoutHandler.class); verify(pipeline).addFirst(any(ReadTimeoutHandler.class)); verify(ctx).writeAndFlush(any(), any()); } }