@Test public void testReleaseUnknown() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { JdbcDatabaseConnection conn1 = new JdbcDatabaseConnection(DriverManager.getConnection(DEFAULT_DATABASE_URL)); pooled.releaseConnection(conn1); } finally { pooled.close(); } }
@Test public void testNestedConnection() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { JdbcDatabaseConnection conn1 = new JdbcDatabaseConnection(DriverManager.getConnection(DEFAULT_DATABASE_URL)); pooled.saveSpecialConnection(conn1); pooled.saveSpecialConnection(conn1); pooled.releaseConnection(conn1); pooled.releaseConnection(conn1); } finally { pooled.close(); } }
@Test(expected = SQLException.class) public void testReleaseNoInit() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(); try { pooled.releaseConnection(null); } finally { IOUtils.closeQuietly(pooled); } }
@Test public void testReleaseAlreadyClosedUnknown() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { JdbcDatabaseConnection conn1 = new JdbcDatabaseConnection(DriverManager.getConnection(DEFAULT_DATABASE_URL)); conn1.close(); pooled.releaseConnection(conn1); } finally { pooled.close(); } }
@Test public void testMaxFree() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { pooled.setMaxConnectionsFree(2); DatabaseConnection conn1 = pooled.getReadWriteConnection(null); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); DatabaseConnection conn3 = pooled.getReadWriteConnection(null); pooled.releaseConnection(conn1); pooled.releaseConnection(conn2); pooled.releaseConnection(conn3); DatabaseConnection conn4 = pooled.getReadWriteConnection(null); // not conn1 which should be closed assertSame(conn2, conn4); } finally { pooled.close(); } }
@Test public void testReleaseAfterClose() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); DatabaseConnection conn1; try { conn1 = pooled.getReadOnlyConnection(null); } finally { pooled.close(); } pooled.releaseConnection(conn1); }
@Test public void testMaxAgeMaxValue() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { pooled.setMaxConnectionAgeMillis(Long.MAX_VALUE); DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); pooled.releaseConnection(conn1); } finally { pooled.close(); } }
@Test public void testReleaseAlreadyClosed() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); conn1.close(); pooled.releaseConnection(conn1); } finally { pooled.close(); } }
@Test public void testMaxAge() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { long maxAge = 500; pooled.setMaxConnectionAgeMillis(maxAge); DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); pooled.releaseConnection(conn1); Thread.sleep(maxAge + 1); DatabaseConnection conn2 = pooled.getReadOnlyConnection(null); assertNotSame(conn1, conn2); } finally { pooled.close(); } }
@Test public void testAuthTestConnection() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); long delay = 100; pooled.setCheckConnectionsEveryMillis(delay); String pingStatement = pooled.getDatabaseType().getPingStatement(); try { DatabaseConnection conn1 = pooled.getReadWriteConnection(null); conn1.queryForLong(pingStatement); pooled.releaseConnection(conn1); // make it test ok once Thread.sleep(delay + 50); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); assertSame(conn1, conn2); conn2.queryForLong(pingStatement); pooled.releaseConnection(conn2); // close it behind the pool's back, bad dog conn2.close(); // now it should find out that the connection is bad and pull it Thread.sleep(delay + 50); DatabaseConnection conn3 = pooled.getReadWriteConnection(null); assertNotSame(conn2, conn3); // this should work conn3.queryForLong(pingStatement); pooled.releaseConnection(conn3); } finally { pooled.close(); } }
@Test public void testAuthTestConnectionExpired() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); long delay = 100; pooled.setCheckConnectionsEveryMillis(delay); pooled.setMaxConnectionAgeMillis(delay); String pingStatement = pooled.getDatabaseType().getPingStatement(); try { DatabaseConnection conn1 = pooled.getReadWriteConnection(null); conn1.queryForLong(pingStatement); pooled.releaseConnection(conn1); // make it test ok once Thread.sleep(delay * 2); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); assertNotSame(conn1, conn2); conn2.queryForLong(pingStatement); pooled.releaseConnection(conn2); } finally { pooled.close(); } }
@Test public void testTestClosedConnectionWithTesting() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); String pingStatement = pooled.getDatabaseType().getPingStatement(); pooled.setTestBeforeGet(true); try { DatabaseConnection conn1 = pooled.getReadWriteConnection(null); conn1.queryForLong(pingStatement); pooled.releaseConnection(conn1); // close it behind the pool's back, bad dog conn1.close(); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); assertNotSame(conn1, conn2); conn2.queryForLong(pingStatement); pooled.releaseConnection(conn2); DatabaseConnection conn3 = pooled.getReadWriteConnection(null); assertSame(conn2, conn3); conn3.queryForLong(pingStatement); pooled.releaseConnection(conn3); } finally { pooled.close(); } }
@Test public void testTransaction() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); pooled.saveSpecialConnection(conn2); DatabaseConnection conn3 = pooled.getReadWriteConnection(null); assertSame(conn2, conn3); pooled.releaseConnection(conn3); pooled.releaseConnection(conn1); DatabaseConnection conn4 = pooled.getReadWriteConnection(null); assertSame(conn2, conn4); pooled.releaseConnection(conn4); pooled.clearSpecialConnection(conn2); DatabaseConnection conn5 = pooled.getReadWriteConnection(null); assertSame(conn1, conn5); conn1.close(); conn2.close(); conn3.close(); conn4.close(); conn5.close(); } finally { pooled.close(); } }
@Test public void testSetAutoCommit() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); conn1.setAutoCommit(false); pooled.releaseConnection(conn1); DatabaseConnection conn2 = pooled.getReadOnlyConnection(null); assertSame(conn1, conn2); assertTrue(conn2.isAutoCommit()); } finally { pooled.close(); } }
@Test public void testBasic() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { DatabaseConnection conn1 = pooled.getReadOnlyConnection(null); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); assertNotSame(conn1, conn2); pooled.releaseConnection(conn2); DatabaseConnection conn3 = pooled.getReadWriteConnection(null); assertNotSame(conn1, conn3); assertSame(conn2, conn3); DatabaseConnection conn4 = pooled.getReadWriteConnection(null); assertNotSame(conn1, conn4); assertNotSame(conn3, conn4); pooled.releaseConnection(conn1); pooled.releaseConnection(conn3); DatabaseConnection conn5 = pooled.getReadOnlyConnection(null); assertSame(conn1, conn5); DatabaseConnection conn6 = pooled.getReadOnlyConnection(null); assertSame(conn3, conn6); conn1.close(); conn2.close(); conn3.close(); conn4.close(); conn5.close(); conn6.close(); } finally { pooled.close(); } }
@Test public void testIsOpen() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); try { pooled.setUrl("jdbc:h2:mem:baz"); assertTrue(pooled.isOpen(null)); DatabaseConnection conn = pooled.getReadOnlyConnection(null); pooled.releaseConnection(conn); assertTrue(pooled.isOpen(null)); } finally { pooled.close(); assertFalse(pooled.isOpen(null)); } }
assertEquals(0, pooled.getReleaseCount()); assertEquals(0, pooled.getCurrentConnectionsFree()); pooled.releaseConnection(conn1); assertEquals(1, pooled.getReleaseCount()); assertEquals(1, pooled.getCurrentConnectionsFree()); pooled.releaseConnection(conn2); assertEquals(2, pooled.getReleaseCount()); assertEquals(1, pooled.getCurrentConnectionsFree());
@Test(expected = SQLException.class) public void testTestConnectionThatWasClosed() throws Exception { JdbcPooledConnectionSource pooled = new JdbcPooledConnectionSource(DEFAULT_DATABASE_URL); String pingStatement = pooled.getDatabaseType().getPingStatement(); try { DatabaseConnection conn1 = pooled.getReadWriteConnection(null); conn1.queryForLong(pingStatement); pooled.releaseConnection(conn1); // close it behind the pool's back, bad dog conn1.close(); DatabaseConnection conn2 = pooled.getReadWriteConnection(null); assertSame(conn1, conn2); conn2.queryForLong(pingStatement); } finally { pooled.close(); } }
assertEquals(2, pooled.getMaxConnectionsEverUsed()); assertEquals(2, pooled.getCurrentConnectionsManaged()); pooled.releaseConnection(conn2); pooled.releaseConnection(conn1); assertEquals(2, pooled.getOpenCount()); assertEquals(0, pooled.getCloseCount());