diff options
Diffstat (limited to 'src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java')
-rw-r--r-- | src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java b/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java new file mode 100644 index 0000000..35b36fb --- /dev/null +++ b/src/test/java/com/zaxxer/hikari/pool/ConnectionStateTest.java @@ -0,0 +1,170 @@ +/* + * 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 com.zaxxer.hikari.pool.TestElf.newHikariDataSource; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import org.junit.Test; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import com.zaxxer.hikari.util.UtilityElf; + +public class ConnectionStateTest +{ + @Test + public void testAutoCommit() throws SQLException + { + try (HikariDataSource ds = newHikariDataSource()) { + ds.setAutoCommit(true); + ds.setMinimumIdle(1); + ds.setMaximumPoolSize(1); + ds.setConnectionTestQuery("VALUES 1"); + ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + ds.addDataSourceProperty("user", "bar"); + ds.addDataSourceProperty("password", "secret"); + ds.addDataSourceProperty("url", "baf"); + ds.addDataSourceProperty("loginTimeout", "10"); + + try (Connection connection = ds.getConnection()) { + Connection unwrap = connection.unwrap(Connection.class); + connection.setAutoCommit(false); + connection.close(); + + assertTrue(unwrap.getAutoCommit()); + } + } + } + + @Test + public void testTransactionIsolation() throws SQLException + { + try (HikariDataSource ds = newHikariDataSource()) { + ds.setTransactionIsolation("TRANSACTION_READ_COMMITTED"); + ds.setMinimumIdle(1); + ds.setMaximumPoolSize(1); + ds.setConnectionTestQuery("VALUES 1"); + ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + try (Connection connection = ds.getConnection()) { + Connection unwrap = connection.unwrap(Connection.class); + connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); + connection.close(); + + assertEquals(Connection.TRANSACTION_READ_COMMITTED, unwrap.getTransactionIsolation()); + } + } + } + + @Test + public void testIsolation() throws Exception + { + HikariConfig config = newHikariConfig(); + config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + config.setTransactionIsolation("TRANSACTION_REPEATABLE_READ"); + config.validate(); + + int transactionIsolation = UtilityElf.getTransactionIsolation(config.getTransactionIsolation()); + assertSame(Connection.TRANSACTION_REPEATABLE_READ, transactionIsolation); + } + + @Test + public void testReadOnly() throws Exception + { + try (HikariDataSource ds = newHikariDataSource()) { + ds.setCatalog("test"); + ds.setMinimumIdle(1); + ds.setMaximumPoolSize(1); + ds.setConnectionTestQuery("VALUES 1"); + ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + try (Connection connection = ds.getConnection()) { + Connection unwrap = connection.unwrap(Connection.class); + connection.setReadOnly(true); + connection.close(); + + assertFalse(unwrap.isReadOnly()); + } + } + } + + @Test + public void testCatalog() throws SQLException + { + try (HikariDataSource ds = newHikariDataSource()) { + ds.setCatalog("test"); + ds.setMinimumIdle(1); + ds.setMaximumPoolSize(1); + ds.setConnectionTestQuery("VALUES 1"); + ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + try (Connection connection = ds.getConnection()) { + Connection unwrap = connection.unwrap(Connection.class); + connection.setCatalog("other"); + connection.close(); + + assertEquals("test", unwrap.getCatalog()); + } + } + } + + @Test + public void testCommitTracking() throws SQLException + { + try (HikariDataSource ds = newHikariDataSource()) { + ds.setAutoCommit(false); + ds.setMinimumIdle(1); + ds.setMaximumPoolSize(1); + ds.setConnectionTestQuery("VALUES 1"); + ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + try (Connection connection = ds.getConnection()) { + Statement statement = connection.createStatement(); + statement.execute("SELECT something"); + assertTrue(TestElf.getConnectionCommitDirtyState(connection)); + + connection.commit(); + assertFalse(TestElf.getConnectionCommitDirtyState(connection)); + + statement.execute("SELECT something", Statement.NO_GENERATED_KEYS); + assertTrue(TestElf.getConnectionCommitDirtyState(connection)); + + connection.rollback(); + assertFalse(TestElf.getConnectionCommitDirtyState(connection)); + + ResultSet resultSet = statement.executeQuery("SELECT something"); + assertTrue(TestElf.getConnectionCommitDirtyState(connection)); + + connection.rollback(null); + assertFalse(TestElf.getConnectionCommitDirtyState(connection)); + + resultSet.updateRow(); + assertTrue(TestElf.getConnectionCommitDirtyState(connection)); + } + } + } +} |