package org.deftserver.io.buffer;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
public class DynamicByteBufferTest {
private DynamicByteBuffer dbb;
private static final int INITIAL_CAPACITY = 10; // bytes
@Before
public void allocation() {
this.dbb = DynamicByteBuffer.allocate(INITIAL_CAPACITY);
}
@Test
public void testAllocation() {
assertInternalState(INITIAL_CAPACITY, 0, INITIAL_CAPACITY, INITIAL_CAPACITY);
}
private void assertInternalState(int expectedCapacity, int expectedPosition, int expectedLimit, int arrayLength) {
assertEquals(expectedCapacity, dbb.capacity());
assertEquals(expectedPosition, dbb.position());
assertEquals(expectedLimit, dbb.limit());
assertEquals(arrayLength, dbb.array().length);
}
@Test
public void testNoReallactionPut() {
byte[] data = new byte[] {'q', 'w', 'e', 'r', 't', 'y'};
dbb.put(data);
assertInternalState(INITIAL_CAPACITY, data.length, INITIAL_CAPACITY, INITIAL_CAPACITY);
}
@Test
public void testReallocationTriggeredPut() {
byte[] data = new byte[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A'};
dbb.put(data);
assertInternalState(16, 11, 16, 16);
dbb.put(data);
assertInternalState(33, 22, 33, 33);
dbb.put(data);
dbb.put(data);
assertInternalState(66, 44, 66, 66);
}
@Test
public void testPrepend() {
byte[] data = new byte[] {'[', 'q', 'w', 'e', 'r', 't', 'y', ']'};
dbb.put(data);
String initial = "|HTTP/1.1 200 OK|";
int initialLength = initial.length();
dbb.prepend(initial);
int expectedCapacity = data.length + initialLength;
int expectedPosition = data.length + initialLength;
int expectedLimit = data.length + initialLength;
int arrayLength = data.length + initialLength;
assertInternalState(expectedCapacity, expectedPosition, expectedLimit, arrayLength);
dbb.put(data);
expectedCapacity = 49;
expectedPosition += data.length;
expectedLimit = 49;
arrayLength = 49;
assertInternalState(expectedCapacity, expectedPosition, expectedLimit, arrayLength);
}
@Test
public void testReallocationLimit() {
byte[] data = "0123456".getBytes();
dbb.put(data);
assertInternalState(10, 7, 10, 10);
dbb.put("0123456789".getBytes());
assertInternalState(25, 17, 25, 25);
}
}