| Method from org.apache.commons.dbcp.datasources.TestPerUserPoolDataSource Detail: |
protected Connection getConnection() throws Exception {
return ds.getConnection("foo","bar");
}
|
public void setUp() throws Exception {
DriverAdapterCPDS pcds = new DriverAdapterCPDS();
pcds.setDriver("org.apache.commons.dbcp.TesterDriver");
pcds.setUrl("jdbc:apache:commons:testdriver");
pcds.setUser("foo");
pcds.setPassword("bar");
PerUserPoolDataSource tds = new PerUserPoolDataSource();
tds.setConnectionPoolDataSource(pcds);
tds.setDefaultMaxActive(getMaxActive());
tds.setDefaultMaxWait((int)(getMaxWait()));
tds.setPerUserMaxActive("foo",new Integer(getMaxActive()));
tds.setPerUserMaxWait("foo",new Integer((int)(getMaxWait())));
tds.setDefaultTransactionIsolation(
Connection.TRANSACTION_READ_COMMITTED);
ds = tds;
}
|
public static Test suite() {
return new TestSuite(TestPerUserPoolDataSource.class);
}
|
public void testClosing() throws Exception {
Connection[] c = new Connection[getMaxActive()];
// open the maximum connections
for (int i=0; i< c.length; i++)
{
c[i] = ds.getConnection();
}
// close one of the connections
c[0].close();
assertTrue(c[0].isClosed());
// get a new connection
c[0] = ds.getConnection();
for (int i=0; i< c.length; i++)
{
c[i].close();
}
}
|
public void testClosingWithUserName() throws Exception {
Connection[] c = new Connection[getMaxActive()];
// open the maximum connections
for (int i=0; i< c.length; i++)
{
c[i] = ds.getConnection("u1", "p1");
}
// close one of the connections
c[0].close();
assertTrue(c[0].isClosed());
// get a new connection
c[0] = ds.getConnection("u1", "p1");
for (int i=0; i< c.length; i++)
{
c[i].close();
}
// open the maximum connections
for (int i=0; i< c.length; i++)
{
c[i] = ds.getConnection("u1", "p1");
}
for (int i=0; i< c.length; i++)
{
c[i].close();
}
}
|
public void testDefaultUser1() throws Exception {
TesterDriver.addUser("mkh", "password");
TesterDriver.addUser("hanafey", "password");
TesterDriver.addUser("jsmith", "password");
PerUserPoolDataSource puds = (PerUserPoolDataSource) ds;
puds.setPerUserMaxActive("jsmith", new Integer(2));
String[] users = {"mkh", "hanafey", "jsmith"};
String password = "password";
Connection[] c = new Connection[users.length];
for (int i = 0; i < users.length; i++) {
c[i] = puds.getConnection(users[i], password);
assertEquals(users[i], getUsername(c[i]));
}
for (int i = 0; i < users.length; i++) {
c[i].close();
}
}
|
public void testDefaultUser2() throws Exception {
TesterDriver.addUser("mkh", "password");
TesterDriver.addUser("hanafey", "password");
TesterDriver.addUser("jsmith", "password");
PerUserPoolDataSource puds = (PerUserPoolDataSource) ds;
puds.setPerUserMaxActive("jsmith", new Integer(2));
String[] users = {"jsmith", "hanafey", "mkh"};
String password = "password";
Connection[] c = new Connection[users.length];
for (int i = 0; i < users.length; i++) {
c[i] = puds.getConnection(users[i], password);
assertEquals(users[i], getUsername(c[i]));
}
for (int i = 0; i < users.length; i++) {
c[i].close();
}
}
|
public void testIncorrectPassword() throws Exception {
try {
// Use bad password
ds.getConnection("u1", "zlsafjk").close();
fail("Able to retrieve connection with incorrect password");
} catch (SQLException e1) {
// should fail
}
// Use good password
ds.getConnection("u1", "p1").close();
try
{
ds.getConnection("u1", "x").close();
fail("Able to retrieve connection with incorrect password");
}
catch (SQLException e)
{
if (!e.getMessage().startsWith("Given password did not match"))
{
throw e;
}
// else the exception was expected
}
// Make sure we can still use our good password.
ds.getConnection("u1", "p1").close();
}
Switching 'u1 -> 'u2' and 'p1' -> 'p2' will
exhibit the bug detailed in
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18905 |
public void testMaxActive() throws Exception {
Connection[] c = new Connection[getMaxActive()];
for (int i=0; i< c.length; i++)
{
c[i] = ds.getConnection();
assertTrue(c[i] != null);
}
try
{
ds.getConnection();
fail("Allowed to open more than DefaultMaxActive connections.");
}
catch(java.sql.SQLException e)
{
// should only be able to open 10 connections, so this test should
// throw an exception
}
for (int i=0; i< c.length; i++)
{
c[i].close();
}
}
|
public void testMultipleThreads() throws Exception {
assertTrue(multipleThreads(1));
assertTrue(!multipleThreads(2 * (int)(getMaxWait())));
}
|
public void testOpening() throws Exception {
Connection[] c = new Connection[getMaxActive()];
// test that opening new connections is not closing previous
for (int i=0; i< c.length; i++)
{
c[i] = ds.getConnection();
assertTrue(c[i] != null);
for (int j=0; j< =i; j++)
{
assertTrue(!c[j].isClosed());
}
}
for (int i=0; i< c.length; i++)
{
c[i].close();
}
}
|
public void testPerUserMethods() throws Exception {
PerUserPoolDataSource tds = (PerUserPoolDataSource) ds;
// you need to set maxActive otherwise there is no accounting
tds.setPerUserMaxActive("u1", new Integer(5));
tds.setPerUserMaxActive("u2", new Integer(5));
assertEquals(0, tds.getNumActive());
assertEquals(0, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumActive("u2", "p2"));
assertEquals(0, tds.getNumIdle());
assertEquals(0, tds.getNumIdle("u1", "p1"));
assertEquals(0, tds.getNumIdle("u2", "p2"));
Connection conn = tds.getConnection();
assertNotNull(conn);
assertEquals(1, tds.getNumActive());
assertEquals(0, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumActive("u2", "p2"));
assertEquals(0, tds.getNumIdle());
assertEquals(0, tds.getNumIdle("u1", "p1"));
assertEquals(0, tds.getNumIdle("u2", "p2"));
conn.close();
assertEquals(0, tds.getNumActive());
assertEquals(0, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumActive("u2", "p2"));
assertEquals(1, tds.getNumIdle());
assertEquals(0, tds.getNumIdle("u1", "p1"));
assertEquals(0, tds.getNumIdle("u2", "p2"));
conn = tds.getConnection("u1", "p1");
assertNotNull(conn);
assertEquals(0, tds.getNumActive());
assertEquals(1, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumActive("u2", "p2"));
assertEquals(1, tds.getNumIdle());
assertEquals(0, tds.getNumIdle("u1", "p1"));
assertEquals(0, tds.getNumIdle("u2", "p2"));
conn.close();
assertEquals(0, tds.getNumActive());
assertEquals(0, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumActive("u2", "p2"));
assertEquals(1, tds.getNumIdle());
assertEquals(1, tds.getNumIdle("u1", "p1"));
assertEquals(0, tds.getNumIdle("u2", "p2"));
}
|
public void testSerialization() throws Exception {
// make sure the pool has initialized
Connection conn = ds.getConnection();
conn.close();
// serialize
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject((Serializable)ds);
byte[] b = baos.toByteArray();
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
ObjectInputStream in = new ObjectInputStream(bais);
Object obj = in.readObject();
in.close();
assertEquals( 1, ((PerUserPoolDataSource)obj).getNumIdle() );
}
|
public void testSimple() throws Exception {
Connection conn = ds.getConnection();
assertTrue(null != conn);
PreparedStatement stmt = conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
ResultSet rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
}
|
public void testSimple2() throws Exception {
Connection conn = ds.getConnection();
assertTrue(null != conn);
PreparedStatement stmt =
conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
ResultSet rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
stmt = conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
try
{
conn.createStatement();
fail("Can't use closed connections");
}
catch(SQLException e)
{
// expected
}
conn = ds.getConnection();
assertTrue(null != conn);
stmt = conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
stmt = conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
conn = null;
}
|
public void testSimpleWithUsername() throws Exception {
Connection conn = ds.getConnection("u1", "p1");
assertTrue(null != conn);
PreparedStatement stmt = conn.prepareStatement("select * from dual");
assertTrue(null != stmt);
ResultSet rset = stmt.executeQuery();
assertTrue(null != rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
}
|
public void testTransactionIsolationBehavior() throws Exception {
Connection conn = getConnection();
assertTrue(conn != null);
assertEquals(Connection.TRANSACTION_READ_COMMITTED,
conn.getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
conn.close();
Connection conn2 = getConnection();
assertEquals(Connection.TRANSACTION_READ_COMMITTED,
conn2.getTransactionIsolation());
Connection conn3 = getConnection();
assertEquals(Connection.TRANSACTION_READ_COMMITTED,
conn3.getTransactionIsolation());
conn2.close();
conn3.close();
}
|
public void testUnregisteredUser() throws Exception {
PerUserPoolDataSource tds = (PerUserPoolDataSource) ds;
assertEquals(0, tds.getNumActive());
assertEquals(0, tds.getNumIdle());
Connection conn = tds.getConnection();
assertNotNull(conn);
assertEquals(1, tds.getNumActive());
assertEquals(0, tds.getNumIdle());
conn.close();
assertEquals(0, tds.getNumActive());
assertEquals(1, tds.getNumIdle());
conn = tds.getConnection("u1", "p1");
assertNotNull(conn);
assertEquals(0, tds.getNumActive());
assertEquals(1, tds.getNumIdle());
assertEquals(1, tds.getNumActive("u1", "p1"));
assertEquals(0, tds.getNumIdle("u1", "p1"));
conn.close();
assertEquals(0, tds.getNumActive());
assertEquals(1, tds.getNumIdle());
assertEquals(0, tds.getNumActive("u1", "p1"));
assertEquals(1, tds.getNumIdle("u1", "p1"));
}
|