TestProxies.java
/*
* Copyright (C) 2013, 2014 Brett Wooldridge
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zaxxer.hikari.pool;
import static com.zaxxer.hikari.pool.TestElf.newHikariConfig;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.mocks.StubConnection;
import com.zaxxer.hikari.mocks.StubStatement;
public class TestProxies
{
@Test
public void testProxyCreation() throws SQLException
{
HikariConfig config = newHikariConfig();
config.setMinimumIdle(0);
config.setMaximumPoolSize(1);
config.setConnectionTestQuery("VALUES 1");
config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
try (HikariDataSource ds = new HikariDataSource(config)) {
Connection conn = ds.getConnection();
assertNotNull(conn.createStatement(ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE));
assertNotNull(conn.createStatement(ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.HOLD_CURSORS_OVER_COMMIT));
assertNotNull(conn.prepareCall("some sql"));
assertNotNull(conn.prepareCall("some sql", ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE));
assertNotNull(conn.prepareCall("some sql", ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.HOLD_CURSORS_OVER_COMMIT));
assertNotNull(conn.prepareStatement("some sql", PreparedStatement.NO_GENERATED_KEYS));
assertNotNull(conn.prepareStatement("some sql", new int[3]));
assertNotNull(conn.prepareStatement("some sql", new String[3]));
assertNotNull(conn.prepareStatement("some sql", ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE));
assertNotNull(conn.prepareStatement("some sql", ResultSet.FETCH_FORWARD, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.HOLD_CURSORS_OVER_COMMIT));
assertNotNull(conn.toString());
assertTrue(conn.isWrapperFor(Connection.class));
assertTrue(conn.isValid(10));
assertFalse(conn.isClosed());
assertTrue(conn.unwrap(StubConnection.class) instanceof StubConnection);
try {
conn.unwrap(TestProxies.class);
fail();
}
catch (SQLException e) {
// pass
}
}
}
@Test
public void testStatementProxy() throws SQLException
{
HikariConfig config = newHikariConfig();
config.setMinimumIdle(0);
config.setMaximumPoolSize(1);
config.setConnectionTestQuery("VALUES 1");
config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
try (HikariDataSource ds = new HikariDataSource(config)) {
Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement("some sql");
stmt.executeQuery();
stmt.executeQuery("some sql");
assertFalse(stmt.isClosed());
assertNotNull(stmt.getGeneratedKeys());
assertNotNull(stmt.getResultSet());
assertNotNull(stmt.getConnection());
assertTrue(stmt.unwrap(StubStatement.class) instanceof StubStatement);
try {
stmt.unwrap(TestProxies.class);
fail();
}
catch (SQLException e) {
// pass
}
}
}
@Test
public void testStatementExceptions() throws SQLException
{
HikariConfig config = newHikariConfig();
config.setMinimumIdle(0);
config.setMaximumPoolSize(1);
config.setConnectionTimeout(TimeUnit.SECONDS.toMillis(1));
config.setConnectionTestQuery("VALUES 1");
config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
try (HikariDataSource ds = new HikariDataSource(config)) {
Connection conn = ds.getConnection();
StubConnection stubConnection = conn.unwrap(StubConnection.class);
stubConnection.throwException = true;
try {
conn.createStatement();
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.createStatement(0, 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.createStatement(0, 0, 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareCall("");
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareCall("", 0, 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareCall("", 0, 0, 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("");
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("", 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("", new int[0]);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("", new String[0]);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("", 0, 0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.prepareStatement("", 0, 0, 0);
fail();
}
catch (SQLException e) {
// pass
}
}
}
@Test
public void testOtherExceptions() throws SQLException
{
HikariConfig config = newHikariConfig();
config.setMinimumIdle(0);
config.setMaximumPoolSize(1);
config.setConnectionTestQuery("VALUES 1");
config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
try (HikariDataSource ds = new HikariDataSource(config)) {
try (Connection conn = ds.getConnection()) {
StubConnection stubConnection = conn.unwrap(StubConnection.class);
stubConnection.throwException = true;
try {
conn.setTransactionIsolation(Connection.TRANSACTION_NONE);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.isReadOnly();
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.setReadOnly(false);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.setCatalog("");
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.setAutoCommit(false);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.clearWarnings();
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.isValid(0);
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.isWrapperFor(getClass());
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.unwrap(getClass());
fail();
}
catch (SQLException e) {
// pass
}
try {
conn.close();
fail();
}
catch (SQLException e) {
// pass
}
try {
assertFalse(conn.isValid(0));
}
catch (SQLException e) {
fail();
}
}
}
}
}