package me.prettyprint.cassandra.utils;
import static org.junit.Assert.*;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.junit.Test;
public class ByteBufferOutputStreamTest {
@Test
public void testWriteByteArray() throws IOException {
List<Integer> sizes = Arrays.asList(
0,
1,
100,
1000,
ByteBufferOutputStream.INITIAL_BUFFER_SIZE -1,
ByteBufferOutputStream.INITIAL_BUFFER_SIZE,
ByteBufferOutputStream.INITIAL_BUFFER_SIZE + 1,
10 * ByteBufferOutputStream.INITIAL_BUFFER_SIZE
);
for(int bufferSize : sizes) {
testWriteLByteArray(bufferSize);
}
}
private void testWriteLByteArray(int bufferSize) throws IOException {
ByteBufferOutputStream sink = new ByteBufferOutputStream();
byte[] written = new byte[bufferSize];
new Random().nextBytes(written);
sink.write(written);
assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written));
}
@Test
public void testWriteByteArraySeveralSteps() throws IOException {
ByteBufferOutputStream sink = new ByteBufferOutputStream();
byte[] written = new byte[32 * ByteBufferOutputStream.INITIAL_BUFFER_SIZE];
new Random().nextBytes(written);
for(int i = 0; i < 32; i++) {
sink.write(written, i * ByteBufferOutputStream.INITIAL_BUFFER_SIZE, ByteBufferOutputStream.INITIAL_BUFFER_SIZE);
}
assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written));
}
@Test
public void testWriteLargeByteBuffer() throws IOException {
ByteBufferOutputStream sink = new ByteBufferOutputStream();
byte[] written = new byte[32 * 1000];
new Random().nextBytes(written);
sink.write(ByteBuffer.wrap(written));
assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written));
}
}