assertWaitUntil(() -> mgr.closed()); assertEquals(1, mgr.closeCount());
@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 testSynchronousConnectionFailure() { Throwable cause = new Throwable(); ConnectionProvider<FakeConnection> connector = new FakeConnectionProviderBase() { @Override public void connect(ConnectionListener<FakeConnection> listener, ContextInternal context, Handler<AsyncResult<ConnectResult<FakeConnection>>> handler) { handler.handle(Future.failedFuture(cause)); } }; FakeConnectionManager mgr = new FakeConnectionManager(3, 3, connector); for (int i = 0;i < 4;i++) { FakeWaiter waiter = new FakeWaiter(); mgr.getConnection(waiter); waitUntil(waiter::isFailure); waiter.assertFailure(cause); assertEquals(0, mgr.pool().weight()); } assertTrue(mgr.closed()); }
assertWaitUntil(() -> mgr.closed()); assertEquals(1, mgr.closeCount());
@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 testRecycleDiscardedConnection() { 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); conn.close(); waiter1.recycle(); assertWaitUntil(() -> connector.requests() == 1); assertFalse(mgr.closed()); FakeConnection conn2 = connector.assertRequest(); conn2.connect(); assertWaitUntil(waiter2::isSuccess); }
@Test public void testSynchronousConnectionFailure() { Throwable cause = new Throwable(); ConnectionProvider<FakeConnection> connector = new FakeConnectionProviderBase() { @Override public void connect(ConnectionListener<FakeConnection> listener, ContextInternal context, Handler<AsyncResult<ConnectResult<FakeConnection>>> handler) { handler.handle(Future.failedFuture(cause)); } }; FakeConnectionManager mgr = new FakeConnectionManager(3, 3, connector); for (int i = 0;i < 4;i++) { FakeWaiter waiter = new FakeWaiter(); mgr.getConnection(waiter); waitUntil(waiter::isFailure); waiter.assertFailure(cause); assertEquals(0, mgr.pool().weight()); } assertTrue(mgr.closed()); }
@Test public void testDontCloseEndpointWithInflightRequest() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 2, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isComplete); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); conn.close(); assertWaitUntil(() -> !mgr.contains(conn)); assertFalse(mgr.closed()); }
@Test public void testRecycleDiscardedConnection() { 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); conn.close(); waiter1.recycle(); assertWaitUntil(() -> connector.requests() == 1); assertFalse(mgr.closed()); FakeConnection conn2 = connector.assertRequest(); conn2.connect(); assertWaitUntil(waiter2::isSuccess); }
@Test public void testDontCloseEndpointWithInflightRequest() { FakeConnectionProvider connector = new FakeConnectionProvider(); FakeConnectionManager mgr = new FakeConnectionManager(3, 2, connector); FakeWaiter waiter1 = new FakeWaiter(); mgr.getConnection(waiter1); FakeConnection conn = connector.assertRequest(); conn.connect(); assertWaitUntil(waiter1::isComplete); FakeWaiter waiter2 = new FakeWaiter(); mgr.getConnection(waiter2); conn.close(); assertWaitUntil(() -> !mgr.contains(conn)); assertFalse(mgr.closed()); }