package com.vaadin.v7.data.util.sqlcontainer.connection;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
public class J2EEConnectionPoolTest {
@Test
public void reserveConnection_dataSourceSpecified_shouldReturnValidConnection()
throws SQLException {
Connection connection = EasyMock.createMock(Connection.class);
connection.setAutoCommit(false);
EasyMock.expectLastCall();
DataSource ds = EasyMock.createMock(DataSource.class);
ds.getConnection();
EasyMock.expectLastCall().andReturn(connection);
EasyMock.replay(connection, ds);
J2EEConnectionPool pool = new J2EEConnectionPool(ds);
Connection c = pool.reserveConnection();
Assert.assertEquals(connection, c);
EasyMock.verify(connection, ds);
}
@Test
public void releaseConnection_shouldCloseConnection() throws SQLException {
Connection connection = EasyMock.createMock(Connection.class);
connection.setAutoCommit(false);
EasyMock.expectLastCall();
connection.close();
EasyMock.expectLastCall();
DataSource ds = EasyMock.createMock(DataSource.class);
ds.getConnection();
EasyMock.expectLastCall().andReturn(connection);
EasyMock.replay(connection, ds);
J2EEConnectionPool pool = new J2EEConnectionPool(ds);
Connection c = pool.reserveConnection();
Assert.assertEquals(connection, c);
pool.releaseConnection(c);
EasyMock.verify(connection, ds);
}
@Test
public void reserveConnection_dataSourceLookedUp_shouldReturnValidConnection()
throws SQLException, NamingException {
Connection connection = EasyMock.createMock(Connection.class);
connection.setAutoCommit(false);
EasyMock.expectLastCall();
connection.close();
EasyMock.expectLastCall();
DataSource ds = EasyMock.createMock(DataSource.class);
ds.getConnection();
EasyMock.expectLastCall().andReturn(connection);
System.setProperty("java.naming.factory.initial",
MockInitialContextFactory.class.getCanonicalName());
Context context = EasyMock.createMock(Context.class);
context.lookup("testDataSource");
EasyMock.expectLastCall().andReturn(ds);
MockInitialContextFactory.setMockContext(context);
EasyMock.replay(context, connection, ds);
J2EEConnectionPool pool = new J2EEConnectionPool("testDataSource");
Connection c = pool.reserveConnection();
Assert.assertEquals(connection, c);
pool.releaseConnection(c);
EasyMock.verify(context, connection, ds);
}
@Test(expected = SQLException.class)
public void reserveConnection_nonExistantDataSourceLookedUp_shouldFail()
throws SQLException, NamingException {
System.setProperty("java.naming.factory.initial",
"com.vaadin.addon.sqlcontainer.connection.MockInitialContextFactory");
Context context = EasyMock.createMock(Context.class);
context.lookup("foo");
EasyMock.expectLastCall().andThrow(new NamingException("fail"));
MockInitialContextFactory.setMockContext(context);
EasyMock.replay(context);
J2EEConnectionPool pool = new J2EEConnectionPool("foo");
pool.reserveConnection();
EasyMock.verify(context);
}
@Test
public void releaseConnection_null_shouldSucceed() throws SQLException {
DataSource ds = EasyMock.createMock(DataSource.class);
EasyMock.replay(ds);
J2EEConnectionPool pool = new J2EEConnectionPool(ds);
pool.releaseConnection(null);
EasyMock.verify(ds);
}
}