From 37a6a139ef29cde49594b13a009cd72b14155453 Mon Sep 17 00:00:00 2001 From: Geert Gerritsen Date: Mon, 6 Aug 2012 11:47:02 +0200 Subject: [PATCH] Fix for bug mentioned in https://bugs.launchpad.net/bonecp/+bug/999114 --- .../main/java/com/jolbox/bonecp/BoneCP.java | 4 +++ .../java/com/jolbox/bonecp/TestBoneCP.java | 33 ++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/bonecp/src/main/java/com/jolbox/bonecp/BoneCP.java b/bonecp/src/main/java/com/jolbox/bonecp/BoneCP.java index cd164e4..8b9e52e 100755 --- a/bonecp/src/main/java/com/jolbox/bonecp/BoneCP.java +++ b/bonecp/src/main/java/com/jolbox/bonecp/BoneCP.java @@ -626,6 +626,10 @@ protected void internalReleaseConnection(ConnectionHandle connectionHandle) thro if (connectionHandle.isExpired() || (!this.poolShuttingDown && connectionHandle.isPossiblyBroken() && !isConnectionHandleAlive(connectionHandle))){ + if (connectionHandle.isExpired()) { + connectionHandle.internalClose(); + } + ConnectionPartition connectionPartition = connectionHandle.getOriginatingPartition(); postDestroyConnection(connectionHandle); diff --git a/bonecp/src/test/java/com/jolbox/bonecp/TestBoneCP.java b/bonecp/src/test/java/com/jolbox/bonecp/TestBoneCP.java index 134cee0..4e4bde3 100755 --- a/bonecp/src/test/java/com/jolbox/bonecp/TestBoneCP.java +++ b/bonecp/src/test/java/com/jolbox/bonecp/TestBoneCP.java @@ -821,8 +821,6 @@ public void testInternalReleaseConnection() throws InterruptedException, SQLExce */ @Test public void testInternalReleaseConnectionWhereConnectionIsBroken() throws InterruptedException, SQLException { - - // Test case where connection is broken reset(mockConnection,mockPartition, mockConnectionHandles); expect(mockConnection.isPossiblyBroken()).andReturn(true).once(); @@ -844,10 +842,37 @@ public void testInternalReleaseConnectionWhereConnectionIsBroken() throws Interr replay(mockPartition, mockConnection); testClass.internalReleaseConnection(mockConnection); verify(mockPartition, mockConnection); - } - /** + /** + * Test method for {@link com.jolbox.bonecp.BoneCP#internalReleaseConnection(ConnectionHandle)}. + * + * @throws InterruptedException + * @throws SQLException + */ + @Test + public void testInternalReleaseConnectionWhereConnectionIsExpired() throws InterruptedException, SQLException { + // Test case where connection is expired + reset(mockConnection, mockPartition, mockConnectionHandles); + + Connection mockRealConnection = createNiceMock(Connection.class); + expect(mockConnection.getInternalConnection()).andReturn(mockRealConnection).anyTimes(); + + // return a partition + expect(mockConnection.getOriginatingPartition()).andReturn(mockPartition).anyTimes(); + // break out from this method, we're not interested in it + expect(mockPartition.isUnableToCreateMoreTransactions()).andReturn(true).once(); + + expect(mockConnection.isExpired()).andReturn(true).anyTimes(); + mockConnection.internalClose(); + expectLastCall(); + + replay(mockPartition, mockConnection, mockRealConnection); + testClass.internalReleaseConnection(mockConnection); + verify(mockPartition, mockConnection, mockRealConnection); + } + + /** * Test method for {@link com.jolbox.bonecp.BoneCP#putConnectionBackInPartition(com.jolbox.bonecp.ConnectionHandle)}. * @throws InterruptedException * @throws SQLException