postgresql/src/interfaces/jdbc/org/postgresql/test/jdbc3/Jdbc3PoolingDataSourceTest.java

149 lines
4.2 KiB
Java

package org.postgresql.test.jdbc3;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.postgresql.test.jdbc2.optional.PoolingDataSourceTest;
import org.postgresql.test.TestUtil;
import org.postgresql.jdbc3.Jdbc3PoolingDataSource;
import org.postgresql.jdbc2.optional.PoolingDataSource;
/**
* Minimal tests for JDBC3 pooling DataSource. Needs many more.
*
* @author Aaron Mulder (ammulder@chariotsolutions.com)
* @version $Revision: 1.2 $
*/
public class Jdbc3PoolingDataSourceTest extends PoolingDataSourceTest
{
private final static String DS_NAME = "JDBC 3 Test DataSource";
/**
* Constructor required by JUnit
*/
public Jdbc3PoolingDataSourceTest(String name)
{
super(name);
}
/**
* Creates and configures a new SimpleDataSource.
*/
protected void initializeDataSource()
{
if (bds == null)
{
bds = new Jdbc3PoolingDataSource();
configureDataSource((Jdbc3PoolingDataSource) bds);
}
}
private void configureDataSource(PoolingDataSource source)
{
String db = TestUtil.getURL();
source.setServerName(TestUtil.getServer());
source.setPortNumber(TestUtil.getPort());
source.setDatabaseName(TestUtil.getDatabase());
source.setUser(TestUtil.getUser());
source.setPassword(TestUtil.getPassword());
source.setDataSourceName(DS_NAME);
source.setInitialConnections(2);
source.setMaxConnections(10);
}
/**
* Check that 2 DS instances can't use the same name.
*/
public void testCantReuseName()
{
initializeDataSource();
Jdbc3PoolingDataSource pds = new Jdbc3PoolingDataSource();
try
{
pds.setDataSourceName(DS_NAME);
fail("Should have denied 2nd DataSource with same name");
}
catch (IllegalArgumentException e)
{
}
}
/**
* Test that JDBC 2 and JDBC 3 DSs come from different buckets
* as far as creating with the same name
*/
public void testDifferentImplPools()
{
initializeDataSource();
PoolingDataSource pds = new PoolingDataSource();
try
{
configureDataSource(pds);
PoolingDataSource p2 = new PoolingDataSource();
try
{
configureDataSource(p2);
fail("Shouldn't be able to create 2 JDBC 2 DSs with same name");
}
catch (IllegalArgumentException e)
{
}
Jdbc3PoolingDataSource p3 = new Jdbc3PoolingDataSource();
try
{
configureDataSource(p3);
fail("Shouldn't be able to create 2 JDBC 3 DSs with same name");
}
catch (IllegalArgumentException e)
{
}
}
finally
{
pds.close();
}
}
/**
* Test that JDBC 2 and JDBC 3 DSs come from different buckets
* as far as fetching from JNDI
*/
public void testDifferentImplJndi()
{
initializeDataSource();
PoolingDataSource pds = new PoolingDataSource();
try
{
configureDataSource(pds);
try
{
Connection j3c = getDataSourceConnection();
Connection j2c = pds.getConnection();
j2c.close();
j3c.close();
InitialContext ctx = getInitialContext();
ctx.bind("JDBC2", pds);
ctx.bind("JDBC3", bds);
pds = (PoolingDataSource) ctx.lookup("JDBC2");
bds = (Jdbc3PoolingDataSource) ctx.lookup("JDBC3");
j2c = pds.getConnection();
j3c = bds.getConnection();
j2c.close();
j3c.close();
}
catch (SQLException e)
{
fail(e.getMessage());
}
catch (NamingException e)
{
fail(e.getMessage());
}
}
finally
{
pds.close();
}
}
}