@Test public void testConnectSuccess() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 4, connector); AtomicReference<Boolean> handleLock = new AtomicReference<>(); FakeWaiter waiter = new FakeWaiter() { @Override public synchronized void handleConnection(FakeConnection conn) { assertSame(conn.context, mgr.context); Pool<FakeConnection> pool = mgr.pool(); handleLock.set(Thread.holdsLock(pool)); super.handleConnection(conn); } }; mgr.getConnection(waiter); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter::isComplete); assertEquals(Boolean.FALSE, handleLock.get()); waiter.assertSuccess(conn); waiter.recycle(); assertEquals(0, mgr.size()); assertWaitUntil(() -> mgr.closed()); }
@Test public void testConnectSuccess() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 4, connector); AtomicReference<Boolean> handleLock = new AtomicReference<>(); FakeWaiter waiter = new FakeWaiter() { @Override public synchronized void handleConnection(FakeConnection conn) { assertSame(conn.context, mgr.context); Pool<FakeConnection> pool = mgr.pool(); handleLock.set(Thread.holdsLock(pool)); super.handleConnection(conn); } }; mgr.getConnection(waiter); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter::isComplete); assertEquals(Boolean.FALSE, handleLock.get()); waiter.assertSuccess(conn); waiter.recycle(); assertEquals(0, mgr.size()); assertWaitUntil(() -> mgr.closed()); }
@Test public void testRecycleFIFO() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 2, connector, true); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection firstInConnection = connector.assertRequest(); firstInConnection.connect(); assertWaitUntil(waiter1::isSuccess); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); FakeConnection lastInConnection = connector.assertRequest(); lastInConnection.connect(); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(lastInConnection); firstInConnection.recycle(false); lastInConnection.recycle(false); assertEquals(2, mgr.size()); FakeWaiter waiter3 = new FakeWaiter(); mgr.getConnection(waiter3); assertWaitUntil(waiter3::isSuccess); waiter3.assertSuccess(firstInConnection); }
@Test public void testRecycleLIFO() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 2, connector, false); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection firstInConnection = connector.assertRequest(); firstInConnection.connect(); assertWaitUntil(waiter1::isSuccess); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); FakeConnection lastInConnection = connector.assertRequest(); lastInConnection.connect(); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(lastInConnection); firstInConnection.recycle(false); lastInConnection.recycle(false); assertEquals(2, mgr.size()); FakeWaiter waiter3 = new FakeWaiter(); mgr.getConnection(waiter3); assertWaitUntil(waiter3::isSuccess); waiter3.assertSuccess(lastInConnection); }
@Test public void testRecycleWithoutDispose() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 1, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isSuccess); conn.recycle(false); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(conn); conn.recycle(true); assertEquals(0, mgr.size()); }
@Test public void testRecycleConnection() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 1, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isComplete); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); connector.assertRequests(0); waiter1.recycle(); assertWaitUntil(waiter2::isComplete); waiter2.assertSuccess(conn); }
@Test public void testRecycleLIFO() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 2, connector, false); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection firstInConnection = connector.assertRequest(); firstInConnection.connect(); assertWaitUntil(waiter1::isSuccess); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); FakeConnection lastInConnection = connector.assertRequest(); lastInConnection.connect(); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(lastInConnection); firstInConnection.recycle(false); lastInConnection.recycle(false); assertEquals(2, mgr.size()); FakeWaiter waiter3 = new FakeWaiter(); mgr.getConnection(waiter3); assertWaitUntil(waiter3::isSuccess); waiter3.assertSuccess(lastInConnection); }
@Test public void testRecycleFIFO() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 2, connector, true); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection firstInConnection = connector.assertRequest(); firstInConnection.connect(); assertWaitUntil(waiter1::isSuccess); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); FakeConnection lastInConnection = connector.assertRequest(); lastInConnection.connect(); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(lastInConnection); firstInConnection.recycle(false); lastInConnection.recycle(false); assertEquals(2, mgr.size()); FakeWaiter waiter3 = new FakeWaiter(); mgr.getConnection(waiter3); assertWaitUntil(waiter3::isSuccess); waiter3.assertSuccess(firstInConnection); }
@Test public void testRecycleConnection() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 1, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isComplete); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); connector.assertRequests(0); waiter1.recycle(); assertWaitUntil(waiter2::isComplete); waiter2.assertSuccess(conn); }
@Test public void testRecycleWithoutDispose() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(-1, 1, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isSuccess); conn.recycle(false); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); assertWaitUntil(waiter2::isSuccess); waiter2.assertSuccess(conn); conn.recycle(true); assertEquals(0, mgr.size()); }