From cb38844e8a19c0c53acc636fdc1d99d77939fa5c Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Sun, 12 Oct 2014 23:07:55 +0900 Subject: [PATCH] DataSource unwrap tests. --- .../java/com/zaxxer/hikari/UnwrapTest.java | 36 ++++++++++++++++--- .../zaxxer/hikari/mocks/StubDataSource.java | 7 +++- .../java/com/zaxxer/hikari/UnwrapTest.java | 36 ++++++++++++++++--- .../zaxxer/hikari/mocks/StubDataSource.java | 7 +++- 4 files changed, 76 insertions(+), 10 deletions(-) diff --git a/hikaricp-java6/src/test/java/com/zaxxer/hikari/UnwrapTest.java b/hikaricp-java6/src/test/java/com/zaxxer/hikari/UnwrapTest.java index 6a8a7bcf..f6ea93cf 100644 --- a/hikaricp-java6/src/test/java/com/zaxxer/hikari/UnwrapTest.java +++ b/hikaricp-java6/src/test/java/com/zaxxer/hikari/UnwrapTest.java @@ -23,6 +23,7 @@ import org.junit.Assert; import org.junit.Test; import com.zaxxer.hikari.mocks.StubConnection; +import com.zaxxer.hikari.mocks.StubDataSource; /** * @author Brett Wooldridge @@ -41,8 +42,7 @@ public class UnwrapTest HikariDataSource ds = new HikariDataSource(config); - try - { + try { Assert.assertSame("Idle connections not as expected", 1, TestElf.getPool(ds).getIdleConnections()); Connection connection = ds.getConnection(); @@ -51,9 +51,37 @@ public class UnwrapTest StubConnection unwrapped = connection.unwrap(StubConnection.class); Assert.assertTrue("unwrapped connection is not instance of StubConnection: " + unwrapped, (unwrapped != null && unwrapped instanceof StubConnection)); } - finally - { + finally { ds.close(); } } + + @Test + public void testUnwrapDataSource() throws SQLException + { + HikariConfig config = new HikariConfig(); + config.setMinimumIdle(1); + config.setMaximumPoolSize(1); + config.setInitializationFailFast(true); + config.setConnectionTestQuery("VALUES 1"); + config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + HikariDataSource ds = new HikariDataSource(config); + try { + StubDataSource unwrap = ds.unwrap(StubDataSource.class); + Assert.assertNotNull(unwrap); + Assert.assertTrue(unwrap instanceof StubDataSource); + + Assert.assertFalse(ds.isWrapperFor(getClass())); + try { + ds.unwrap(getClass()); + } + catch (SQLException e) { + Assert.assertTrue(e.getMessage().contains("Wrapped DataSource")); + } + } + finally { + ds.close(); + } + } } diff --git a/hikaricp-java6/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java b/hikaricp-java6/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java index d7e7c936..d5675c9a 100644 --- a/hikaricp-java6/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java +++ b/hikaricp-java6/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java @@ -94,10 +94,15 @@ public class StubDataSource implements DataSource } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public T unwrap(Class iface) throws SQLException { - return null; + if (iface.isInstance(this)) { + return (T) this; + } + + throw new SQLException("Wrapped DataSource is not an instance of " + iface); } /** {@inheritDoc} */ diff --git a/hikaricp/src/test/java/com/zaxxer/hikari/UnwrapTest.java b/hikaricp/src/test/java/com/zaxxer/hikari/UnwrapTest.java index 6a8a7bcf..f6ea93cf 100644 --- a/hikaricp/src/test/java/com/zaxxer/hikari/UnwrapTest.java +++ b/hikaricp/src/test/java/com/zaxxer/hikari/UnwrapTest.java @@ -23,6 +23,7 @@ import org.junit.Assert; import org.junit.Test; import com.zaxxer.hikari.mocks.StubConnection; +import com.zaxxer.hikari.mocks.StubDataSource; /** * @author Brett Wooldridge @@ -41,8 +42,7 @@ public class UnwrapTest HikariDataSource ds = new HikariDataSource(config); - try - { + try { Assert.assertSame("Idle connections not as expected", 1, TestElf.getPool(ds).getIdleConnections()); Connection connection = ds.getConnection(); @@ -51,9 +51,37 @@ public class UnwrapTest StubConnection unwrapped = connection.unwrap(StubConnection.class); Assert.assertTrue("unwrapped connection is not instance of StubConnection: " + unwrapped, (unwrapped != null && unwrapped instanceof StubConnection)); } - finally - { + finally { ds.close(); } } + + @Test + public void testUnwrapDataSource() throws SQLException + { + HikariConfig config = new HikariConfig(); + config.setMinimumIdle(1); + config.setMaximumPoolSize(1); + config.setInitializationFailFast(true); + config.setConnectionTestQuery("VALUES 1"); + config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + HikariDataSource ds = new HikariDataSource(config); + try { + StubDataSource unwrap = ds.unwrap(StubDataSource.class); + Assert.assertNotNull(unwrap); + Assert.assertTrue(unwrap instanceof StubDataSource); + + Assert.assertFalse(ds.isWrapperFor(getClass())); + try { + ds.unwrap(getClass()); + } + catch (SQLException e) { + Assert.assertTrue(e.getMessage().contains("Wrapped DataSource")); + } + } + finally { + ds.close(); + } + } } diff --git a/hikaricp/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java b/hikaricp/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java index d7e7c936..d5675c9a 100644 --- a/hikaricp/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java +++ b/hikaricp/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java @@ -94,10 +94,15 @@ public class StubDataSource implements DataSource } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public T unwrap(Class iface) throws SQLException { - return null; + if (iface.isInstance(this)) { + return (T) this; + } + + throw new SQLException("Wrapped DataSource is not an instance of " + iface); } /** {@inheritDoc} */