@Test(timeout = 60_000L) public void testTakeBatch() { final List<ReferenceCountingResourceHolder<Integer>> holder = pool.takeBatch(6, 100L); assertNotNull(holder); assertEquals(6, holder.size()); assertEquals(4, pool.getPoolSize()); holder.forEach(ReferenceCountingResourceHolder::close); assertEquals(10, pool.getPoolSize()); }
@Test(timeout = 60_000L) public void testWaitAndTakeBatch() throws InterruptedException, ExecutionException { List<ReferenceCountingResourceHolder<Integer>> batchHolder = pool.takeBatch(10, 10); assertNotNull(batchHolder); assertEquals(10, batchHolder.size()); assertEquals(0, pool.getPoolSize()); final Future<List<ReferenceCountingResourceHolder<Integer>>> future = service.submit( () -> pool.takeBatch(8, 100) ); Thread.sleep(20); batchHolder.forEach(ReferenceCountingResourceHolder::close); batchHolder = future.get(); assertNotNull(batchHolder); assertEquals(8, batchHolder.size()); assertEquals(2, pool.getPoolSize()); batchHolder.forEach(ReferenceCountingResourceHolder::close); assertEquals(10, pool.getPoolSize()); }
@Test(timeout = 60_000L) public void testTake() { final ReferenceCountingResourceHolder<Integer> holder = pool.take(100); assertNotNull(holder); assertEquals(9, pool.getPoolSize()); holder.close(); assertEquals(10, pool.getPoolSize()); }
assertNotNull(r2); assertEquals(10, r2.size()); assertEquals(0, pool.getPoolSize()); assertEquals(pool.maxSize(), pool.getPoolSize());
@Test(timeout = 60_000L) public void testConcurrentTakeBatch() throws ExecutionException, InterruptedException { final int batch1 = pool.maxSize() / 2; final Callable<List<ReferenceCountingResourceHolder<Integer>>> c1 = () -> pool.takeBatch(batch1, 10); final int batch2 = pool.maxSize() - batch1 + 1; final Callable<List<ReferenceCountingResourceHolder<Integer>>> c2 = () -> pool.takeBatch(batch2, 10); final Future<List<ReferenceCountingResourceHolder<Integer>>> f1 = service.submit(c1); final Future<List<ReferenceCountingResourceHolder<Integer>>> f2 = service.submit(c2); final List<ReferenceCountingResourceHolder<Integer>> r1 = f1.get(); final List<ReferenceCountingResourceHolder<Integer>> r2 = f2.get(); if (r1 != null) { assertTrue(r2.isEmpty()); assertEquals(pool.maxSize() - batch1, pool.getPoolSize()); assertEquals(batch1, r1.size()); r1.forEach(ReferenceCountingResourceHolder::close); } else { assertNotNull(r2); assertEquals(pool.maxSize() - batch2, pool.getPoolSize()); assertEquals(batch2, r2.size()); r2.forEach(ReferenceCountingResourceHolder::close); } assertEquals(pool.maxSize(), pool.getPoolSize()); }
assertEquals(batch1, r1.size()); assertEquals(batch2, r2.size()); assertEquals(0, pool.getPoolSize()); future2.get(); assertEquals(pool.maxSize(), pool.getPoolSize());
final List<ReferenceCountingResourceHolder<Integer>> r2 = f2.get(); assertEquals(0, pool.getPoolSize()); assertTrue(r1.contains(null) || r2.contains(null)); future2.get(); assertEquals(pool.maxSize(), pool.getPoolSize());