package edu.uw.zookeeper.protocol; import static org.junit.Assert.*; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import edu.uw.zookeeper.net.StringDecoder; import edu.uw.zookeeper.net.StringEncoder; @RunWith(JUnit4.class) public class FrameTest { @Test public void testFramedCodec() throws IOException { Frame.FramedEncoder<String,String> encoder = Frame.FramedEncoder.create(new StringEncoder()); Frame.FramedDecoder<String,String> decoder = Frame.FramedDecoder.create( Frame.FrameDecoder.getDefault(), new StringDecoder()); String input = "hello"; ByteBuf buf = Unpooled.buffer(); encoder.encode(input, buf); String output = decoder.decode(buf).orNull(); assertEquals(input, output); assertEquals(0, buf.readableBytes()); encoder.encode(input, buf); int readerIndex = buf.readerIndex(); int writerIndex = buf.writerIndex(); buf.writerIndex(buf.readerIndex()); output = decoder.decode(buf).orNull(); assertEquals(null, output); assertEquals(readerIndex, buf.readerIndex()); buf.writerIndex(buf.writerIndex() + 2); output = decoder.decode(buf).orNull(); assertEquals(null, output); assertEquals(readerIndex, buf.readerIndex()); buf.writerIndex(buf.writerIndex() + 2); output = decoder.decode(buf).orNull(); assertEquals(null, output); assertEquals(readerIndex, buf.readerIndex()); buf.writerIndex(buf.writerIndex() + 1); output = decoder.decode(buf).orNull(); assertEquals(null, output); assertEquals(readerIndex, buf.readerIndex()); buf.writerIndex(writerIndex); output = decoder.decode(buf).orNull(); assertEquals(input, output); assertEquals(0, buf.readableBytes()); } }