package com.alibaba.druid.bvt.pool.exception; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import junit.framework.TestCase; import org.junit.Assert; import com.alibaba.druid.mock.MockConnection; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidPooledConnection; import com.alibaba.druid.pool.vendor.OracleExceptionSorter; import com.alibaba.druid.stat.JdbcStatManager; import com.alibaba.druid.test.util.OracleMockDriver; import com.alibaba.druid.util.JdbcUtils; public class OracleExceptionSorterTest_closeConn_3 extends TestCase { private DruidDataSource dataSource; protected void setUp() throws Exception { Assert.assertEquals(0, JdbcStatManager.getInstance().getSqlList().size()); dataSource = new DruidDataSource(); dataSource.setExceptionSorter(new OracleExceptionSorter()); dataSource.setDriver(new OracleMockDriver()); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setPoolPreparedStatements(true); dataSource.setMaxOpenPreparedStatements(100); } @Override protected void tearDown() throws Exception { JdbcUtils.close(dataSource); } public void test_connect() throws Exception { String sql = "SELECT 1"; { DruidPooledConnection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.execute(); pstmt.close(); conn.close(); Assert.assertEquals(0, dataSource.getActiveCount()); Assert.assertEquals(1, dataSource.getPoolingCount()); Assert.assertEquals(1, dataSource.getCreateCount()); } DruidPooledConnection conn = dataSource.getConnection(); MockConnection mockConn = conn.unwrap(MockConnection.class); Assert.assertNotNull(mockConn); conn.setAutoCommit(false); conn.setReadOnly(false); SQLException exception = new SQLException("xx", "xxx", 28); mockConn.setError(exception); conn.close(); { Connection conn2 = dataSource.getConnection(); conn2.close(); } Assert.assertEquals(0, dataSource.getActiveCount()); Assert.assertEquals(1, dataSource.getPoolingCount()); Assert.assertEquals(2, dataSource.getCreateCount()); } }