/* * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.openflowjava.protocol.impl.core; import static org.junit.Assert.assertEquals; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionFacade; import org.opendaylight.openflowjava.util.ByteBufUtils; /** * Testing class of {@link OFFrameDecoder} * * @author michal.polkorab */ @RunWith(MockitoJUnitRunner.class) public class OFFrameDecoderTest { @Mock ChannelHandlerContext channelHandlerContext; @Mock ConnectionFacade connectionFacade; private OFFrameDecoder decoder; private List<Object> list = new ArrayList<>(); /** * Sets up tests */ @Before public void setUp() { MockitoAnnotations.initMocks(this); decoder = new OFFrameDecoder(connectionFacade, false); list.clear(); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecode8BMessage() { try { decoder.decode(channelHandlerContext, ByteBufUtils.hexStringToByteBuf("04 00 00 08 00 00 00 01"), list); } catch (Exception e) { Assert.fail(); } assertEquals(8, ((ByteBuf) list.get(0)).readableBytes()); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecode16BMessage() { ByteBuf byteBuffer = ByteBufUtils .hexStringToByteBuf("04 00 00 10 00 00 00 00 00 00 00 00 00 00 00 42"); try { decoder.decode(channelHandlerContext, byteBuffer, list); } catch (Exception e) { Assert.fail(); } assertEquals(16, ((ByteBuf) list.get(0)).readableBytes()); assertEquals(0, byteBuffer.readableBytes()); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecode5BIncompleteMessage() { ByteBuf byteBuffer = ByteBufUtils.hexStringToByteBuf("04 00 00 08 00"); try { decoder.decode(channelHandlerContext, byteBuffer, list); } catch (Exception e) { Assert.fail(); } Assert.assertEquals("List is not empty", 0, list.size()); assertEquals(5, byteBuffer.readableBytes()); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecode16BIncompleteMessage() { ByteBuf byteBuffer = ByteBufUtils .hexStringToByteBuf("04 00 00 11 00 00 00 00 00 00 00 00 00 00 00 42"); try { decoder.decode(channelHandlerContext, byteBuffer, list); } catch (Exception e) { Assert.fail(); } Assert.assertEquals("List is not empty", 0, list.size()); assertEquals(16, byteBuffer.readableBytes()); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecodeCompleteAndPartialMessage() { ByteBuf byteBuffer = ByteBufUtils .hexStringToByteBuf("04 00 00 08 00 00 00 01 04 00 00 08 00"); try { decoder.decode(channelHandlerContext, byteBuffer, list); } catch (Exception e) { Assert.fail(); } Assert.assertEquals(8, ((ByteBuf) list.get(0)).readableBytes()); Assert.assertEquals(1, list.size()); assertEquals(5, byteBuffer.readableBytes()); } @Test public void testExceptionCaught() throws Exception { decoder.exceptionCaught(channelHandlerContext, new Throwable()); } /** * Test of decoding * {@link OFFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)} */ @Test public void testDecode8BMessageWithTls() { decoder = new OFFrameDecoder(connectionFacade, true); try { decoder.decode(channelHandlerContext, ByteBufUtils.hexStringToByteBuf("04 00 00 08 00 00 00 01"), list); } catch (Exception e) { Assert.fail(); } assertEquals(8, ((ByteBuf) list.get(0)).readableBytes()); } }