/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.db.pool; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.fail; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Logger; import org.mockito.Mockito; import org.springframework.jdbc.datasource.AbstractDataSource; import org.testng.annotations.Test; import com.jolbox.bonecp.BoneCP; import com.jolbox.bonecp.BoneCPConfig; import com.opengamma.util.async.BlockingOperation; import com.opengamma.util.db.pool.BoneCPHack; import com.opengamma.util.test.TestGroup; import com.opengamma.util.test.Timeout; /** * Tests the {@link BoneCPHack} class. */ @Test(groups = TestGroup.INTEGRATION) public class BoneCPHackTest { private BoneCPConfig createConfig() { final BoneCPConfig config = new BoneCPConfig(); config.setPartitionCount(1); config.setLazyInit(false); config.setMinConnectionsPerPartition(3); config.setMaxConnectionsPerPartition(3); config.setDatasourceBean(new AbstractDataSource() { @Override public Connection getConnection() throws SQLException { return Mockito.mock(Connection.class); } @Override public Connection getConnection(String username, String password) throws SQLException { return getConnection(); } public Logger getParentLogger() { return null; } }); config.setConnectionTimeoutInMs(Timeout.standardTimeoutMillis()); config.setConnectionHook(new BoneCPHack(config.getConnectionHook())); return config; } public void testNonBlocking() throws SQLException { final BoneCP bcp = new BoneCP(createConfig()); BlockingOperation.off(); try { final Connection h1 = bcp.getConnection(); assertNotNull(h1); final Connection h2 = bcp.getConnection(); assertNotNull(h2); final Connection h3 = bcp.getConnection(); assertNotNull(h3); h1.close(); h2.close(); h3.close(); } finally { BlockingOperation.on(); } } @Test(expectedExceptions = {BlockingOperation.class }) public void testBlocking() throws SQLException { final BoneCP bcp = new BoneCP(createConfig()); BlockingOperation.off(); try { final Connection h1 = bcp.getConnection(); assertNotNull(h1); final Connection h2 = bcp.getConnection(); assertNotNull(h2); final Connection h3 = bcp.getConnection(); assertNotNull(h3); bcp.getConnection(); fail(); } finally { BlockingOperation.on(); } } }