diff --git a/src/main/java/com/alibaba/druid/mock/MockConnection.java b/src/main/java/com/alibaba/druid/mock/MockConnection.java index f32b622253..f9ab3da282 100644 --- a/src/main/java/com/alibaba/druid/mock/MockConnection.java +++ b/src/main/java/com/alibaba/druid/mock/MockConnection.java @@ -55,9 +55,28 @@ public class MockConnection implements Connection { private final long createdTimeMillis = System.currentTimeMillis(); private long lastActiveTimeMillis = System.currentTimeMillis(); + private String url; public MockConnection(){ - this(null); + this(null, null, null); + } + + public MockConnection(MockDriver driver, String url, Properties connectProperties){ + this.driver = driver; + this.connectProperties = connectProperties; + this.url = url; + + if (driver != null) { + this.id = driver.generateConnectionId(); + } + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; } public long getLastActiveTimeMillis() { @@ -72,19 +91,6 @@ public class MockConnection implements Connection { return createdTimeMillis; } - public MockConnection(MockDriver driver){ - this(driver, new Properties()); - } - - public MockConnection(MockDriver driver, Properties connectProperties){ - this.driver = driver; - this.connectProperties = connectProperties; - - if (driver != null) { - this.id = driver.generateConnectionId(); - } - } - public long getId() { return id; } diff --git a/src/main/java/com/alibaba/druid/mock/MockDriver.java b/src/main/java/com/alibaba/druid/mock/MockDriver.java index 360fe1cc97..a9004ca548 100644 --- a/src/main/java/com/alibaba/druid/mock/MockDriver.java +++ b/src/main/java/com/alibaba/druid/mock/MockDriver.java @@ -145,7 +145,7 @@ public class MockDriver implements Driver { } } - MockConnection conn = new MockConnection(this, info); + MockConnection conn = new MockConnection(this, url, info); if (LOG.isDebugEnabled()) { LOG.debug("connect, url " + url + ", id " + conn.getId()); diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517_2.java b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517_2.java index 2d6bd7a196..158b06e38b 100644 --- a/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517_2.java +++ b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517_2.java @@ -35,7 +35,7 @@ public class Bug_for_happyday517_2 extends TestCase { public Connection connect(String url, Properties info) throws SQLException { super.connect(url, info); - return new MockConnection(driver, info) { + return new MockConnection(driver, url, info) { public PreparedStatement prepareStatement(String sql) throws SQLException { return mockStatement; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest2.java b/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest2.java new file mode 100644 index 0000000000..5a6efc7bcc --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest2.java @@ -0,0 +1,52 @@ +package com.alibaba.druid.bvt.pool.ha; + +import java.sql.Connection; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.mock.MockConnection; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.ha.HADataSource; +import com.alibaba.druid.stat.DruidDataSourceStatManager; + +public class HADataSourceTest2 extends TestCase { + + private DruidDataSource dataSourceA; + private DruidDataSource dataSourceB; + + private HADataSource dataSourceHA; + + protected void setUp() throws Exception { + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + + dataSourceA = new DruidDataSource(); + dataSourceA.setUrl("jdbc:mock:ha1"); + dataSourceA.setFilters("trace"); + + dataSourceB = new DruidDataSource(); + dataSourceB.setUrl("jdbc:mock:ha2"); + dataSourceB.setFilters("stat"); + + dataSourceHA = new HADataSource(); + dataSourceHA.setMaster(dataSourceA); + dataSourceHA.setSlave(dataSourceB); + } + + protected void tearDown() throws Exception { + dataSourceHA.close(); + + for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { + dataSource.close(); + } + + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + + public void test_switch() throws Exception { + Connection conn = dataSourceHA.getConnection(); + + MockConnection mockConn = conn.unwrap(MockConnection.class); + conn.close(); + } +}