blob: de4d559809fe9c5f14eef723969cc591d915a6f2 [file] [log] [blame]
package org.bouncycastle.crypto.tls.test;
import org.bouncycastle.crypto.tls.ByteQueueInputStream;
import org.bouncycastle.util.Arrays;
import junit.framework.TestCase;
public class ByteQueueInputStreamTest
extends TestCase
{
public void testAvailable()
{
ByteQueueInputStream in = new ByteQueueInputStream();
// buffer is empty
assertEquals(0, in.available());
// after adding once
in.addBytes(new byte[10]);
assertEquals(10, in.available());
// after adding more than once
in.addBytes(new byte[5]);
assertEquals(15, in.available());
// after reading a single byte
in.read();
assertEquals(14, in.available());
// after reading into a byte array
in.read(new byte[4]);
assertEquals(10, in.available());
in.close();// so Eclipse doesn't whine about a resource leak
}
public void testSkip()
{
ByteQueueInputStream in = new ByteQueueInputStream();
// skip when buffer is empty
assertEquals(0, in.skip(10));
// skip equal to available
in.addBytes(new byte[2]);
assertEquals(2, in.skip(2));
assertEquals(0, in.available());
// skip less than available
in.addBytes(new byte[10]);
assertEquals(5, in.skip(5));
assertEquals(5, in.available());
// skip more than available
assertEquals(5, in.skip(20));
assertEquals(0, in.available());
in.close();// so Eclipse doesn't whine about a resource leak
}
public void testRead()
{
ByteQueueInputStream in = new ByteQueueInputStream();
in.addBytes(new byte[]{ 0x01, 0x02 });
in.addBytes(new byte[]{ 0x03 });
assertEquals(0x01, in.read());
assertEquals(0x02, in.read());
assertEquals(0x03, in.read());
assertEquals(-1, in.read());
in.close();// so Eclipse doesn't whine about a resource leak
}
public void testReadArray()
{
ByteQueueInputStream in = new ByteQueueInputStream();
in.addBytes(new byte[]{ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 });
byte[] buffer = new byte[5];
// read less than available into specified position
assertEquals(1, in.read(buffer, 2, 1));
assertArrayEquals(new byte[]{ 0x00, 0x00, 0x01, 0x00, 0x00 }, buffer);
// read equal to available
assertEquals(5, in.read(buffer));
assertArrayEquals(new byte[]{ 0x02, 0x03, 0x04, 0x05, 0x06 }, buffer);
// read more than available
in.addBytes(new byte[]{ 0x01, 0x02, 0x03 });
assertEquals(3, in.read(buffer));
assertArrayEquals(new byte[]{ 0x01, 0x02, 0x03, 0x05, 0x06 }, buffer);
in.close();// so Eclipse doesn't whine about a resource leak
}
public void testPeek()
{
ByteQueueInputStream in = new ByteQueueInputStream();
byte[] buffer = new byte[5];
// peek more than available
assertEquals(0, in.peek(buffer));
assertArrayEquals(new byte[]{ 0x00, 0x00, 0x00, 0x00, 0x00 }, buffer);
// peek less than available
in.addBytes(new byte[]{ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 });
assertEquals(5, in.peek(buffer));
assertArrayEquals(new byte[]{ 0x01, 0x02, 0x03, 0x04, 0x05 }, buffer);
assertEquals(6, in.available());
// peek equal to available
in.read();
assertEquals(5, in.peek(buffer));
assertArrayEquals(new byte[]{ 0x02, 0x03, 0x04, 0x05, 0x06 }, buffer);
assertEquals(5, in.available());
in.close();// so Eclipse doesn't whine about a resource leak
}
private static void assertArrayEquals(byte[] a, byte[] b)
{
assertTrue(Arrays.areEqual(a, b));
}
}