diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestPoolPreparedStatement.java b/src/test/java/com/alibaba/druid/bvt/pool/TestPoolPreparedStatement.java new file mode 100644 index 0000000000..ddb71a0ca9 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestPoolPreparedStatement.java @@ -0,0 +1,63 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.mock.MockDriver; +import com.alibaba.druid.mock.MockPreparedStatement; +import com.alibaba.druid.pool.DruidDataSource; + +public class TestPoolPreparedStatement extends TestCase { + + private MockDriver driver; + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + driver = new MockDriver(); + + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(driver); + dataSource.setInitialSize(1); + dataSource.setMaxActive(2); + dataSource.setMaxIdle(2); + dataSource.setMinIdle(1); + dataSource.setMinEvictableIdleTimeMillis(300 * 1000); // 300 / 10 + dataSource.setTimeBetweenEvictionRunsMillis(10); // 180 / 10 + dataSource.setTestWhileIdle(true); + dataSource.setTestOnBorrow(false); + dataSource.setValidationQuery("SELECT 1"); + dataSource.setFilters("stat"); + dataSource.setPoolPreparedStatements(true); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_removeAbandoned() throws Exception { + + MockPreparedStatement raw; + { + Connection conn = dataSource.getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT ?"); + raw = stmt.unwrap(MockPreparedStatement.class); + stmt.close(); + conn.close(); + } + + { + Connection conn = dataSource.getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT ?"); + Assert.assertTrue(raw == stmt.unwrap(MockPreparedStatement.class)); + stmt.close(); + conn.close(); + } + + Assert.assertEquals(0, dataSource.getActiveCount()); + Assert.assertEquals(1, dataSource.getPoolingCount()); + } +}