X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FChunkedFramingMechanismEncoderTest.java;fp=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FChunkedFramingMechanismEncoderTest.java;h=93475129d2b61687968ee7c05ce8bef6ff58fa62;hp=0000000000000000000000000000000000000000;hb=2f097c374a16b818f50f945cafc2461b9c5b8321;hpb=3083a38411a2b24565323771a9444a661aba5fbd diff --git a/opendaylight/netconf/netconf-netty-util/src/test/java/org/opendaylight/controller/netconf/nettyutil/handler/ChunkedFramingMechanismEncoderTest.java b/opendaylight/netconf/netconf-netty-util/src/test/java/org/opendaylight/controller/netconf/nettyutil/handler/ChunkedFramingMechanismEncoderTest.java new file mode 100644 index 0000000000..93475129d2 --- /dev/null +++ b/opendaylight/netconf/netconf-netty-util/src/test/java/org/opendaylight/controller/netconf/nettyutil/handler/ChunkedFramingMechanismEncoderTest.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.netconf.nettyutil.handler; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.doAnswer; + +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.opendaylight.controller.netconf.util.messages.NetconfMessageConstants; + +public class ChunkedFramingMechanismEncoderTest { + + private int chunkSize; + @Mock + private ChannelHandlerContext ctx; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + chunkSize = 256; + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalSize() throws Exception { + new ChunkedFramingMechanismEncoder(10); + } + + @Test(expected = IllegalArgumentException.class) + public void testIllegalSizeMax() throws Exception { + new ChunkedFramingMechanismEncoder(Integer.MAX_VALUE); + } + + @Test + public void testEncode() throws Exception { + final List chunks = Lists.newArrayList(); + doAnswer(new Answer() { + @Override + public Object answer(final InvocationOnMock invocation) throws Throwable { + chunks.add((ByteBuf) invocation.getArguments()[0]); + return null; + } + }).when(ctx).write(anyObject()); + + final ChunkedFramingMechanismEncoder encoder = new ChunkedFramingMechanismEncoder(chunkSize); + final int lastChunkSize = 20; + final ByteBuf src = Unpooled.wrappedBuffer(getByteArray(chunkSize * 4 + lastChunkSize)); + final ByteBuf destination = Unpooled.buffer(); + encoder.encode(ctx, src, destination); + assertEquals(4, chunks.size()); + + final int framingSize = "#256\n".getBytes().length + 1/* new line at end */; + + for (final ByteBuf chunk : chunks) { + assertEquals(chunkSize + framingSize, chunk.readableBytes()); + } + + final int lastFramingSize = "#20\n".length() + NetconfMessageConstants.END_OF_CHUNK.length + 1/* new line at end */; + assertEquals(lastChunkSize + lastFramingSize, destination.readableBytes()); + } + + private byte[] getByteArray(final int size) { + final byte[] bytes = new byte[size]; + for (int i = 0; i < size; i++) { + bytes[i] = 'a'; + } + return bytes; + } +}