package com.goodworkalan.addendum;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import javax.sql.DataSource;
/**
* An JNDI initial context factory that returns mock data sources to test
* database connection creation through JNDI.
*
* @author Alan Gutierrez
*/
public class TestInitialContextFactory implements InitialContextFactory {
/**
* Return mock data sources with good and bad mock
* <code>getConnection</code> methods.
*
* @param environment
* The possibly null environment specifying information to be
* used in the creation of the initial context.
* @return An initial context.
*/
public Context getInitialContext(Hashtable<?, ?> environment)
throws NamingException {
DataSource bad = mock(DataSource.class);
try {
when(bad.getConnection()).thenThrow(new SQLException());
} catch (SQLException e) {
}
InitialContext ic = mock(InitialContext.class);
when(ic.lookup("bad")).thenReturn(bad);
DataSource good = mock(DataSource.class);
Connection connection = mock(Connection.class);
try {
when(good.getConnection()).thenReturn(connection);
} catch (SQLException e) {
}
when(ic.lookup("good")).thenReturn(good);
return ic;
}
}