package org.limewire.nio.statemachine; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Random; import junit.framework.Test; import org.limewire.nio.channel.ReadBufferChannel; import org.limewire.util.BaseTestCase; public class ReadSkipStateTest extends BaseTestCase { private ByteBuffer BUFFER = ByteBuffer.allocate(1024); public ReadSkipStateTest(String name) { super(name); } public static Test suite() { return buildTestSuite(ReadSkipStateTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } private byte[] data(int len) { Random rnd = new Random(); byte b[] = new byte[len]; rnd.nextBytes(b); return b; } public void testSimpleProcess() throws Exception { byte[] data = data(100); ByteBuffer dbuf = ByteBuffer.wrap(data); ReadBufferChannel channel = new ReadBufferChannel(dbuf); ReadSkipState state = new ReadSkipState(53); assertFalse(state.process(channel, BUFFER)); assertFalse(dbuf.hasRemaining()); assertEquals(47, BUFFER.flip().remaining()); assertEquals(data, 53, 47, BUFFER.array(), 0, 47); } public void testComplexProcess() throws Exception { byte[] data = data(100); ByteBuffer dbuf = ByteBuffer.wrap(data); ReadBufferChannel channel = new ReadBufferChannel(dbuf); ReadSkipState state = new ReadSkipState(53); dbuf.limit(49); assertTrue(state.process(channel, BUFFER)); assertTrue(state.process(channel, BUFFER)); dbuf.limit(55); assertFalse(state.process(channel, BUFFER)); assertFalse(dbuf.hasRemaining()); assertEquals(2, BUFFER.flip().remaining()); assertEquals(data, 53, 2, BUFFER.array(), 0, 2); } public void testEOF() throws Exception { byte[] data = data(100); ByteBuffer dbuf = ByteBuffer.wrap(data); ReadBufferChannel channel = new ReadBufferChannel(dbuf, true); ReadSkipState state = new ReadSkipState(101); try { state.process(channel, BUFFER); fail("expected exception"); } catch(IOException iox) { assertEquals("EOF", iox.getMessage()); } } }