Create SQL data source utils class

- Extract logic used in SQLite and MySQL for logging and closing SQL objects
    - Decided to leave buildAuthFromResultSet methods individually as this might be more implementation-specific
- Rename DataSource#close to DataSource#closeConnection to fix conflict with static import
This commit is contained in:
ljacqu
2017-04-18 22:55:39 +02:00
parent 04ca36fe53
commit 07633a89c8
9 changed files with 226 additions and 69 deletions
@@ -0,0 +1,135 @@
package fr.xephi.authme.datasource;
import fr.xephi.authme.TestHelper;
import org.junit.Before;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Logger;
import static org.hamcrest.Matchers.containsString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.hamcrest.MockitoHamcrest.argThat;
import static org.mockito.Mockito.verify;
/**
* Test for {@link SqlDataSourceUtils}.
*/
public class SqlDataSourceUtilsTest {
private Logger logger;
@Before
public void initLogger() {
logger = TestHelper.setupLogger();
}
@Test
public void shouldHaveHiddenConstructor() {
TestHelper.validateHasOnlyPrivateEmptyConstructor(SqlDataSourceUtils.class);
}
@Test
public void shouldLogException() {
// given
String msg = "Hocus pocus did not work";
SQLException ex = new SQLException(msg);
// when
SqlDataSourceUtils.logSqlException(ex);
// then
verify(logger).warning(argThat(containsString(msg)));
}
@Test
public void shouldCloseStatement() throws SQLException {
// given
Statement st = mock(Statement.class);
// when
SqlDataSourceUtils.close(st);
// then
verify(st).close();
}
@Test
public void shouldHandleExceptionFromStatement() throws SQLException {
// given
Statement st = mock(Statement.class);
doThrow(SQLException.class).when(st).close();
// when
SqlDataSourceUtils.close(st);
// then
verify(logger).warning(anyString());
}
@Test
public void shouldCloseResultSet() throws SQLException {
// given
ResultSet rs = mock(ResultSet.class);
// when
SqlDataSourceUtils.close(rs);
// then
verify(rs).close();
}
@Test
public void shouldHandleExceptionFromResultSet() throws SQLException {
// given
ResultSet rs = mock(ResultSet.class);
doThrow(SQLException.class).when(rs).close();
// when
SqlDataSourceUtils.close(rs);
// then
verify(logger).warning(anyString());
}
@Test
public void shouldCloseConnection() throws SQLException {
// given
Connection con = mock(Connection.class);
// when
SqlDataSourceUtils.close(con);
// then
verify(con).close();
}
@Test
public void shouldHandleExceptionFromConnection() throws SQLException {
// given
Connection con = mock(Connection.class);
doThrow(SQLException.class).when(con).close();
// when
SqlDataSourceUtils.close(con);
// then
verify(logger).warning(anyString());
}
@Test
public void shouldHandleNullArgument() {
// given / when
SqlDataSourceUtils.close((Statement) null);
SqlDataSourceUtils.close((ResultSet) null);
SqlDataSourceUtils.close((Connection) null);
// then - nothing happens
}
}