diff --git a/src/main/java/com/alibaba/druid/mock/MockConnection.java b/src/main/java/com/alibaba/druid/mock/MockConnection.java index d07961ec98..386945d8dd 100644 --- a/src/main/java/com/alibaba/druid/mock/MockConnection.java +++ b/src/main/java/com/alibaba/druid/mock/MockConnection.java @@ -45,18 +45,29 @@ public class MockConnection implements Connection { private MockDriver driver; - public MockConnection(){ + private Properties connectProperties; + public MockConnection(){ + this(null); } public MockConnection(MockDriver driver){ + this(driver, new Properties()); + } + + public MockConnection(MockDriver driver, Properties connectProperties){ this.driver = driver; + this.connectProperties = connectProperties; } public MockDriver getDriver() { return driver; } + public Properties getConnectProperties() { + return connectProperties; + } + public void setDriver(MockDriver driver) { this.driver = driver; } diff --git a/src/main/java/com/alibaba/druid/mock/MockDriver.java b/src/main/java/com/alibaba/druid/mock/MockDriver.java index ca2afa6e73..4c0778b7d2 100644 --- a/src/main/java/com/alibaba/druid/mock/MockDriver.java +++ b/src/main/java/com/alibaba/druid/mock/MockDriver.java @@ -87,7 +87,19 @@ public class MockDriver implements Driver { return null; } - MockConnection conn = new MockConnection(this); + if (info != null) { + Object val = info.get("connectSleep"); + if (val != null) { + long millis = Long.parseLong(val.toString()); + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + // skip + } + } + } + + MockConnection conn = new MockConnection(this, info); if (url == null) { connectCount.incrementAndGet(); @@ -143,6 +155,23 @@ public class MockDriver implements Driver { } protected ResultSet executeQuery(MockStatement stmt, String sql) throws SQLException { + MockConnection conn = stmt.getMockConnection(); + + if (conn != null) { + if (conn.getConnectProperties() != null) { + Object propertyValue = conn.getConnectProperties().get("executeSleep"); + + if (propertyValue != null) { + long millis = Long.parseLong(propertyValue.toString()); + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + // skip + } + } + } + } + if ("SELECT value FROM _int_1000_".equalsIgnoreCase(sql)) { MockResultSet rs = new MockResultSet(stmt); diff --git a/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java b/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java index 15f90b6b49..ae29e4cce7 100644 --- a/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java +++ b/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java @@ -60,8 +60,8 @@ public class MockPreparedStatement extends MockStatement implements PreparedStat @Override public ResultSet executeQuery() throws SQLException { - if (fakeConnection != null && fakeConnection.getDriver() != null) { - return fakeConnection.getDriver().createResultSet(this); + if (mockConnection != null && mockConnection.getDriver() != null) { + return mockConnection.getDriver().createResultSet(this); } return new MockResultSet(this); diff --git a/src/main/java/com/alibaba/druid/mock/MockStatement.java b/src/main/java/com/alibaba/druid/mock/MockStatement.java index b1fd8a28b2..3ba41e1ca3 100644 --- a/src/main/java/com/alibaba/druid/mock/MockStatement.java +++ b/src/main/java/com/alibaba/druid/mock/MockStatement.java @@ -26,23 +26,23 @@ public class MockStatement implements Statement { public final static String ERROR_SQL = "THROW ERROR"; private Connection connection; - protected MockConnection fakeConnection; + protected MockConnection mockConnection; public MockStatement(Connection connection){ super(); this.connection = connection; if (connection instanceof MockConnection) { - fakeConnection = (MockConnection) connection; + mockConnection = (MockConnection) connection; } } - public MockConnection getFakeConnection() { - return fakeConnection; + public MockConnection getMockConnection() { + return mockConnection; } public void setFakeConnection(MockConnection fakeConnection) { - this.fakeConnection = fakeConnection; + this.mockConnection = fakeConnection; this.connection = fakeConnection; } @@ -58,8 +58,8 @@ public class MockStatement implements Statement { @Override public ResultSet executeQuery(String sql) throws SQLException { - if (fakeConnection != null && fakeConnection.getDriver() != null) { - return fakeConnection.getDriver().executeQuery(this, sql); + if (mockConnection != null && mockConnection.getDriver() != null) { + return mockConnection.getDriver().executeQuery(this, sql); } return new MockResultSet(this); diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/Case3.java b/src/test/java/com/alibaba/druid/pool/benckmark/Case3.java index 8905f27111..e4fbc16a19 100644 --- a/src/test/java/com/alibaba/druid/pool/benckmark/Case3.java +++ b/src/test/java/com/alibaba/druid/pool/benckmark/Case3.java @@ -29,20 +29,21 @@ public class Case3 extends TestCase { private String validationQuery = "SELECT 1"; // "SELECT 1"; private int threadCount = 10; private int TEST_COUNT = 3; - final int LOOP_COUNT = 1000 * 10; + final int LOOP_COUNT = 1000 * 1; private boolean testOnBorrow = false; private String connectionProperties = ""; // "bigStringTryClob=true;clientEncoding=GBK;defaultRowPrefetch=50;serverEncoding=ISO-8859-1"; private String sql = "SELECT 1"; protected void setUp() throws Exception { - // jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; - // user = "dragoon25"; - // password = "dragoon25"; - // driverClass = "com.alibaba.druid.mock.MockDriver"; - - jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; - user = "root"; - password = "root"; + jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; + user = "dragoon25"; + password = "dragoon25"; + driverClass = "com.alibaba.druid.mock.MockDriver"; + connectionProperties = "connectSleep=3;executeSleep=1"; + // + // jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + // user = "root"; + // password = "root"; } public void test_perf() throws Exception { diff --git a/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java b/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java index 07744c3fb8..7678d8211c 100644 --- a/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java +++ b/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java @@ -533,7 +533,7 @@ public class DruidDataSourceUIManager extends JFrame { Runnable task = new Runnable() { public void run() { - final int threadCount = 40; + final int threadCount = 10; final int LOOP_COUNT = 1000 * 1000; final String sql = "SELECT 1"; final CountDownLatch startLatch = new CountDownLatch(1);