public ConnectionImpl connectClientToServer(ServerLocation location, boolean forQueue) throws IOException { ConnectionImpl connection = null; boolean initialized = false; try { connection = getConnection(this.ds, this.cancelCriterion); ClientSideHandshake connHandShake = getClientSideHandshake(handshake); connection.connect(endpointManager, location, connHandShake, socketBufferSize, handshakeTimeout, readTimeout, getCommMode(forQueue), this.gatewaySender, this.socketCreator); connection.setHandshake(connHandShake); initialized = true; return connection; } finally { if (!initialized && connection != null) { if (logger.isDebugEnabled()) { logger.debug("Destroying failed connection to {}", location); } destroyConnection(connection); } } }
@Test(expected = GemFireSecurityException.class) public void failedConnectionIsDestroyed() throws IOException { ConnectionConnector spyConnector = spy(new ConnectionConnector(endpointManager, ds, 0, 0, 0, cancelCriterion, false, null, socketCreator, handshake)); doReturn(connection).when(spyConnector).getConnection(ds, cancelCriterion); doReturn(handshake).when(spyConnector).getClientSideHandshake(handshake); when(connection.connect(any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), any(), any())) .thenThrow(new GemFireSecurityException("Expected exception")); try { spyConnector.connectClientToServer(mock(ServerLocation.class), false); } finally { verify(spyConnector).destroyConnection(any()); } }