Java tutorial
/* * This software is licensed under the Apache License, Version 2.0 * (the "License") agreement; 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.moneta.healthcheck; import java.util.Properties; import javax.management.ObjectName; import org.apache.commons.dbcp2.ConnectionFactory; import org.apache.commons.dbcp2.DriverManagerConnectionFactory; import org.apache.commons.dbcp2.PoolableConnection; import org.apache.commons.dbcp2.PoolableConnectionFactory; import org.apache.commons.pool2.impl.GenericObjectPool; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.codahale.metrics.health.HealthCheck.Result; public class DbcpConnectionPoolHealthCheckTest { private static final String VALIDATION_SQL = "SELECT CURRENT_DATE AS today, CURRENT_TIME AS now FROM (VALUES(0))"; DbcpConnectionPoolHealthCheck healthCheck; GenericObjectPool<PoolableConnection> connectionPool; PoolableConnectionFactory poolableConnectionFactory; @Before public void setUp() throws Exception { org.hsqldb.jdbc.JDBCDriver.class.newInstance(); Properties connectionProps = new Properties(); connectionProps.put("user", "SA"); connectionProps.put("password", ""); connectionProps.put("create", "true"); ConnectionFactory connectionFactory = new DriverManagerConnectionFactory("jdbc:hsqldb:mem:my-sample", connectionProps); ObjectName poolName = poolName = new ObjectName("org.moneta", "connectionPool", "TestPool"); poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, poolName); poolableConnectionFactory.setDefaultCatalog("PUBLIC"); poolableConnectionFactory.setValidationQuery(VALIDATION_SQL); connectionPool = new GenericObjectPool<PoolableConnection>(poolableConnectionFactory); poolableConnectionFactory.setPool(connectionPool); connectionPool.setMaxTotal(2); connectionPool.setMaxWaitMillis(400); healthCheck = new DbcpConnectionPoolHealthCheck(connectionPool, "mine"); } @Test public void testBasic() throws Exception { Assert.assertTrue(healthCheck.execute().equals(Result.healthy())); Assert.assertTrue(connectionPool.getNumActive() == 0); poolableConnectionFactory.setValidationQuery("crap"); Result testResult = healthCheck.execute(); Assert.assertTrue(!testResult.isHealthy()); Assert.assertTrue(testResult.getMessage() != null); Assert.assertTrue(testResult.getMessage().contains("validation error")); poolableConnectionFactory.setValidationQuery(VALIDATION_SQL); healthCheck.setMaxWaitingConnections(-1); testResult = healthCheck.execute(); Assert.assertTrue(!testResult.isHealthy()); Assert.assertTrue(testResult.getMessage() != null); Assert.assertTrue(testResult.getMessage().contains("Overloaded connection pool")); Assert.assertTrue(healthCheck.getMaxWaitingConnections() == -1); } @Test public void testExceptions() throws Exception { Throwable exceptionThrown = null; try { new DbcpConnectionPoolHealthCheck(null, null); } catch (Exception e) { exceptionThrown = e; } Assert.assertTrue(exceptionThrown != null); Assert.assertTrue(exceptionThrown.getMessage() != null); Assert.assertTrue(exceptionThrown.getMessage().contains("connection")); exceptionThrown = null; try { new DbcpConnectionPoolHealthCheck(null, null); } catch (Exception e) { exceptionThrown = e; } Assert.assertTrue(exceptionThrown != null); Assert.assertTrue(exceptionThrown.getMessage() != null); Assert.assertTrue(exceptionThrown.getMessage().contains("connection")); } }