package org.webpieces.data.api;
import java.nio.ByteBuffer;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
public class TestReleaseBuffersToPool {
private DataWrapperGenerator dataGen = DataWrapperGeneratorFactory.createDataWrapperGenerator();
private MockPool pool = new MockPool();
private ByteBuffer create(String data) {
return ByteBuffer.wrap(data.getBytes());
}
@Test
public void testBaseCaseByteBufferWrapper() {
ByteBuffer buf1 = create("0123456789");
DataWrapper wrapper = dataGen.wrapByteBuffer(buf1);
wrapper.releaseUnderlyingBuffers(pool);
Assert.assertTrue(pool.releasedBuffers.contains(buf1));
}
@Test
public void testChainedWrapper() {
ByteBuffer buf1 = create("0123456789");
ByteBuffer buf2 = create("9876543210");
DataWrapper wrapper = dataGen.wrapByteBuffer(buf1);
DataWrapper allDat = dataGen.chainDataWrappers(wrapper, buf2);
allDat.releaseUnderlyingBuffers(pool);
Assert.assertTrue(pool.releasedBuffers.contains(buf1));
Assert.assertTrue(pool.releasedBuffers.contains(buf2));
}
@Test
public void testSplitProxyBasic() {
ByteBuffer buf1 = create("0123456789");
DataWrapper wrapper = dataGen.wrapByteBuffer(buf1);
List<? extends DataWrapper> split = dataGen.split(wrapper, 3);
DataWrapper wrap1 = split.get(0);
DataWrapper wrap2 = split.get(1);
wrap1.releaseUnderlyingBuffers(pool);
Assert.assertTrue(!pool.releasedBuffers.contains(buf1));
wrap2.releaseUnderlyingBuffers(pool);
Assert.assertTrue(pool.releasedBuffers.contains(buf1));
}
@Test
public void testChainThenSplitBasic() {
ByteBuffer buf1 = create("0123456789");
ByteBuffer buf2 = create("2222222222");
ByteBuffer buf3 = create("3333333333");
DataWrapper wrap1 = dataGen.wrapByteBuffer(buf1);
DataWrapper all = dataGen.chainDataWrappers(wrap1, buf2, buf3);
List<? extends DataWrapper> split = dataGen.split(all, 15);
DataWrapper left = split.get(0);
DataWrapper right = split.get(1);
left.releaseUnderlyingBuffers(pool);
Assert.assertEquals(1, pool.releasedBuffers.size());
Assert.assertTrue(pool.releasedBuffers.contains(buf1));
Assert.assertTrue(!pool.releasedBuffers.contains(buf2));
Assert.assertTrue(!pool.releasedBuffers.contains(buf3));
right.releaseUnderlyingBuffers(pool);
Assert.assertTrue(pool.releasedBuffers.contains(buf1));
Assert.assertTrue(pool.releasedBuffers.contains(buf2));
Assert.assertTrue(pool.releasedBuffers.contains(buf3));
}
}