package org.ops4j.pax.jdbc.pool.dbcp2.impl;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import javax.sql.XADataSource;
import javax.transaction.TransactionManager;
import org.apache.commons.dbcp2.PoolingDataSource;
import org.apache.commons.dbcp2.managed.ManagedDataSource;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
import org.junit.Test;
import org.osgi.service.jdbc.DataSourceFactory;
public class PooledDataSourceFactoryTest {
@Test
public void testcreateDataSourceWithXA() throws SQLException {
IMocksControl c = EasyMock.createControl();
DataSourceFactory dsf = c.createMock(DataSourceFactory.class);
XADataSource xads = c.createMock(XADataSource.class);
EasyMock.expect(dsf.createXADataSource(EasyMock.anyObject(Properties.class))).andReturn(xads).atLeastOnce();
TransactionManager tm = c.createMock(TransactionManager.class);
DbcpXAPooledDataSourceFactory pdsf = new DbcpXAPooledDataSourceFactory(tm);
c.replay();
DataSource ds = pdsf.create(dsf, createValidProps());
c.verify();
Assert.assertEquals(ManagedDataSource.class, ds.getClass());
try {
pdsf.create(dsf, createInvalidPoolConfig());
} catch (IllegalArgumentException e) {
Assert.assertEquals("Error setting property dummy:No setter in class org.apache.commons.pool2.impl.GenericObjectPoolConfig for property dummy", e.getMessage());
}
try {
pdsf.create(dsf, createInvalidFactoryConfig());
} catch (IllegalArgumentException e) {
Assert.assertEquals("Error setting property dummy:No setter in class org.apache.commons.dbcp2.managed.PoolableManagedConnectionFactory for property dummy", e.getMessage());
}
}
@Test
public void testcreateDataSource() throws SQLException {
IMocksControl c = EasyMock.createControl();
DataSourceFactory dsf = c.createMock(DataSourceFactory.class);
DataSource exds = c.createMock(DataSource.class);
EasyMock.expect(dsf.createDataSource(EasyMock.anyObject(Properties.class))).andReturn(exds).atLeastOnce();
DbcpPooledDataSourceFactory pdsf = new DbcpPooledDataSourceFactory();
c.replay();
DataSource ds = pdsf.create(dsf, createValidProps());
c.verify();
Assert.assertEquals(PoolingDataSource.class, ds.getClass());
try {
pdsf.create(dsf, createInvalidPoolConfig());
} catch (IllegalArgumentException e) {
Assert.assertEquals("Error setting property dummy:No setter in class org.apache.commons.pool2.impl.GenericObjectPoolConfig for property dummy", e.getMessage());
}
try {
pdsf.create(dsf, createInvalidFactoryConfig());
} catch (IllegalArgumentException e) {
Assert.assertEquals("Error setting property dummy:No setter in class org.apache.commons.dbcp2.PoolableConnectionFactory for property dummy", e.getMessage());
}
}
private Properties createValidProps() {
Properties props = new Properties();
props.put("pool.maxTotal", "8");
props.put("factory.validationQuery", "dummyQuery");
return props;
}
private Properties createInvalidPoolConfig() {
Properties props = new Properties();
props.put("pool.dummy", "8");
return props;
}
private Properties createInvalidFactoryConfig() {
Properties props2 = new Properties();
props2.put("factory.dummy", "8");
return props2;
}
}