/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.dbcp.cpdsadapter;
import java.util.Properties;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Tests for DriverAdapterCPDS
*
* @version $Revision:$ $Date:$
*/
public class TestDriverAdapterCPDS extends TestCase {
public TestDriverAdapterCPDS(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(TestDriverAdapterCPDS.class);
}
private DriverAdapterCPDS pcds;
public void setUp() throws Exception {
pcds = new DriverAdapterCPDS();
pcds.setDriver("org.apache.commons.dbcp.TesterDriver");
pcds.setUrl("jdbc:apache:commons:testdriver");
pcds.setUser("foo");
pcds.setPassword("bar");
pcds.setPoolPreparedStatements(false);
}
/**
* JIRA: DBCP-245
*/
public void testIncorrectPassword() throws Exception
{
pcds.getPooledConnection("u2", "p2").close();
try {
// Use bad password
pcds.getPooledConnection("u1", "zlsafjk");
fail("Able to retrieve connection with incorrect password");
} catch (SQLException e1) {
// should fail
}
// Use good password
pcds.getPooledConnection("u1", "p1").close();
try {
pcds.getPooledConnection("u1", "x");
fail("Able to retrieve connection with incorrect password");
}
catch (SQLException e) {
if (!e.getMessage().startsWith("x is not the correct password")) {
throw e;
}
// else the exception was expected
}
// Make sure we can still use our good password.
pcds.getPooledConnection("u1", "p1").close();
}
public void testSimple() throws Exception {
Connection conn = pcds.getPooledConnection().getConnection();
assertNotNull(conn);
PreparedStatement stmt = conn.prepareStatement("select * from dual");
assertNotNull(stmt);
ResultSet rset = stmt.executeQuery();
assertNotNull(rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
}
public void testSimpleWithUsername() throws Exception {
Connection conn = pcds.getPooledConnection("u1", "p1").getConnection();
assertNotNull(conn);
PreparedStatement stmt = conn.prepareStatement("select * from dual");
assertNotNull(stmt);
ResultSet rset = stmt.executeQuery();
assertNotNull(rset);
assertTrue(rset.next());
rset.close();
stmt.close();
conn.close();
}
public void testClosingWithUserName()
throws Exception {
Connection[] c = new Connection[pcds.getMaxActive()];
// open the maximum connections
for (int i=0; i<c.length; i++) {
c[i] = pcds.getPooledConnection("u1", "p1").getConnection();
}
// close one of the connections
c[0].close();
assertTrue(c[0].isClosed());
// get a new connection
c[0] = pcds.getPooledConnection("u1", "p1").getConnection();
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] = pcds.getPooledConnection("u1", "p1").getConnection();
}
for (int i=0; i<c.length; i++) {
c[i].close();
}
}
public void testSetProperties() throws Exception {
// Set user property to bad value
pcds.setUser("bad");
// Supply correct value in connection properties
// This will overwrite field value
Properties properties = new Properties();
properties.put("user", "foo");
pcds.setConnectionProperties(properties);
pcds.getPooledConnection().close();
assertEquals("foo", pcds.getUser());
// Put bad password into properties
properties.put("password", "bad");
// This does not change local field
assertEquals("bar", pcds.getPassword());
// Supply correct password in getPooledConnection
// Call will succeed and overwrite property
pcds.getPooledConnection("foo", "bar").close();
assertEquals("bar", pcds.getConnectionProperties().getProperty("password"));
}
}