/**
* Copyright 2010 Wallace Wadge
*
* Licensed 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 com.jolbox.bonecp.spring;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.fail;
import java.sql.SQLException;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.jdbc.datasource.DelegatingDataSource;
import com.jolbox.bonecp.BoneCPConfig;
import com.jolbox.bonecp.BoneCPDataSource;
import com.jolbox.bonecp.MockJDBCDriver;
/**
* Tests DynamicDataSourceProxy.
* @author Wallace
*
*/
public class TestDynamicDataSourceProxy {
/**
* @throws ClassNotFoundException
* @throws SQLException
*/
@BeforeClass
public static void setup() throws ClassNotFoundException, SQLException{
Class.forName("com.jolbox.bonecp.MockJDBCDriver");
new MockJDBCDriver();
}
/**
* Test method for {@link com.jolbox.bonecp.spring.DynamicDataSourceProxy#DynamicDataSourceProxy(javax.sql.DataSource)}.
*/
@Test
public void testDynamicDataSourceProxyDataSource() {
DelegatingDataSource mockDataSource = createNiceMock(DelegatingDataSource.class);
DynamicDataSourceProxy ddsp = new DynamicDataSourceProxy(mockDataSource);
assertEquals(mockDataSource, ddsp.getTargetDataSource());
}
/**
* Test method for {@link com.jolbox.bonecp.spring.DynamicDataSourceProxy#DynamicDataSourceProxy()}.
*/
@Test
public void testDynamicDataSourceProxy() {
new DynamicDataSourceProxy(); // coverage
}
/**
* Test method for {@link com.jolbox.bonecp.spring.DynamicDataSourceProxy#switchDataSource(com.jolbox.bonecp.BoneCPConfig)}.
* @throws SQLException
* @throws ClassNotFoundException
*/
@Test
public void testSwitchDataSource() throws SQLException, ClassNotFoundException {
BoneCPDataSource mockDataSource = createNiceMock(BoneCPDataSource.class);
DynamicDataSourceProxy ddsp = new DynamicDataSourceProxy();
// Test #1: Check for correct instance.
ddsp.setTargetDataSource(new DelegatingDataSource());
try{
ddsp.switchDataSource(null);
fail("Should throw an exception");
} catch(SQLException e){
// do nothing
}
// Test #2: Given a good config, should initialize pool and switch datasource to it
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl("jdbc:mock");
config.setUsername("sa");
config.setPassword("");
config.setMinConnectionsPerPartition(2);
config.setMaxConnectionsPerPartition(2);
config.setPartitionCount(1);
ddsp = new DynamicDataSourceProxy(mockDataSource);
// Old datasource should be closed.
mockDataSource.close();
expectLastCall().once();
replay(mockDataSource);
ddsp.switchDataSource(config);
// and a new datasource should be in place
assertNotSame(mockDataSource, ddsp.getTargetDataSource());
verify(mockDataSource);
}
}