Repository: cayenne Updated Branches: refs/heads/master beb07ceb5 -> 55ea394a6
CAY-2009 Non-blocking connection pool * unit tests to check the queue timeout behavior Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/55ea394a Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/55ea394a Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/55ea394a Branch: refs/heads/master Commit: 55ea394a6ad8dad5b236a0f7b4b2d2d52144395f Parents: beb07ce Author: aadamchik <[email protected]> Authored: Sun May 10 14:25:44 2015 -0400 Committer: aadamchik <[email protected]> Committed: Sun May 10 14:25:44 2015 -0400 ---------------------------------------------------------------------- .../datasource/BasePoolingDataSourceIT.java | 6 ++-- .../cayenne/datasource/PoolingDataSourceIT.java | 37 +++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/55ea394a/cayenne-server/src/test/java/org/apache/cayenne/datasource/BasePoolingDataSourceIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/datasource/BasePoolingDataSourceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/datasource/BasePoolingDataSourceIT.java index 0c9ea45..22d8421 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/datasource/BasePoolingDataSourceIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/datasource/BasePoolingDataSourceIT.java @@ -22,8 +22,6 @@ import java.sql.Driver; import java.sql.SQLException; import org.apache.cayenne.conn.DataSourceInfo; -import org.apache.cayenne.datasource.PoolingDataSource; -import org.apache.cayenne.datasource.PoolingDataSourceParameters; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.Inject; import org.apache.cayenne.log.JdbcEventLogger; @@ -36,6 +34,8 @@ import org.junit.Before; @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class BasePoolingDataSourceIT extends ServerCase { + protected static final long QUEUE_WAIT_TIME = 1000l; + @Inject private DataSourceInfo dataSourceInfo; @@ -70,7 +70,7 @@ public class BasePoolingDataSourceIT extends ServerCase { PoolingDataSourceParameters poolParameters = new PoolingDataSourceParameters(); poolParameters.setMinConnections(2); poolParameters.setMaxConnections(3); - poolParameters.setMaxQueueWaitTime(1000); + poolParameters.setMaxQueueWaitTime(QUEUE_WAIT_TIME); return poolParameters; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/55ea394a/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceIT.java index 342300c..894a50a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceIT.java @@ -47,7 +47,7 @@ public class PoolingDataSourceIT extends BasePoolingDataSourceIT { } @Test - public void testGetConnectionAutoCommit() throws Exception { + public void testGetConnection_AutoCommit() throws Exception { assertTrue(dataSource.getMaxConnections() > 0); @@ -86,6 +86,41 @@ public class PoolingDataSourceIT extends BasePoolingDataSourceIT { } @Test + public void testGetConnection_FailOnFull() throws Exception { + + assertTrue(dataSource.getMaxConnections() > 0); + + List<Connection> connections = new ArrayList<Connection>(); + try { + + for (int i = 0; i < dataSource.getMaxConnections(); i++) { + connections.add(dataSource.getConnection()); + } + + long t0 = System.currentTimeMillis(); + try { + + dataSource.getConnection(); + fail("Opening more connections than the pool allows succeeeded"); + } catch (SQLException e) { + // expected, but check if we waited sufficiently + + long t1 = System.currentTimeMillis(); + assertTrue(t1 - t0 >= QUEUE_WAIT_TIME); + } + + } finally { + for (Connection c : connections) { + try { + c.close(); + } catch (SQLException e) { + + } + } + } + } + + @Test public void testGetConnection() throws Exception { assertEquals(2, dataSource.poolSize());
