package test.net.buffer; import com.firefly.net.buffer.ThreadSafeIOBufferPool; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.List; import static org.hamcrest.Matchers.is; /** * @author Pengtao Qiu */ @RunWith(Parameterized.class) public class TestIOBufferPool { @Parameter public Run r; static class Run { ThreadSafeIOBufferPool bufferPool; boolean directBuffer; String testName; @Override public String toString() { return testName; } } @Parameters(name = "{0}") public static Collection<Run> data() { List<Run> data = new ArrayList<>(); Run run = new Run(); run.bufferPool = new ThreadSafeIOBufferPool(); run.directBuffer = true; run.testName = "test direct buffer pool"; data.add(run); run = new Run(); run.bufferPool = new ThreadSafeIOBufferPool(false); run.directBuffer = false; run.testName = "test heap buffer pool"; data.add(run); return data; } @Test public void testDirectBuffer() { int max = 8; for (int i = 1; i <= max; i++) { ByteBuffer buffer = r.bufferPool.acquire(i * 1024); Assert.assertThat(r.bufferPool.size(), is(i - 1)); System.out.println("buffer: " + buffer.remaining() + ", direct: " + buffer.isDirect()); Assert.assertThat(buffer.isDirect(), is(r.directBuffer)); r.bufferPool.release(buffer); Assert.assertThat(r.bufferPool.size(), is(i)); ByteBuffer buffer2 = r.bufferPool.acquire(i * 1024); Assert.assertThat(r.bufferPool.size(), is(i - 1)); Assert.assertThat(buffer2 == buffer, is(true)); r.bufferPool.release(buffer2); Assert.assertThat(r.bufferPool.size(), is(i)); } ByteBuffer buffer = r.bufferPool.acquire(16 * 1024); Assert.assertThat(r.bufferPool.size(), is(max)); System.out.println("buffer: " + buffer.remaining() + ", direct: " + buffer.isDirect()); Assert.assertThat(buffer.remaining(), is(16 * 1024)); r.bufferPool.release(buffer); Assert.assertThat(r.bufferPool.size(), is(max)); buffer = r.bufferPool.acquire(10 * 1024); Assert.assertThat(r.bufferPool.size(), is(max - 1)); System.out.println("buffer: " + buffer.remaining() + ", direct: " + buffer.isDirect()); Assert.assertThat(buffer.remaining(), is(16 * 1024)); r.bufferPool.release(buffer); Assert.assertThat(r.bufferPool.size(), is(max)); } }