/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2007-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.referencing.factory.epsg; import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner; import net.sourceforge.groboutils.junit.v1.TestRunnable; import org.apache.commons.dbcp.BasicDataSource; import org.geotools.factory.Hints; import org.geotools.referencing.factory.epsg.OracleDialectEpsgMediatorOnlineStressTest.ClientThread; import org.geotools.referencing.factory.epsg.oracle.OracleOnlineTestCase; /** * Multi-threaded test to check that no connections are leaked by the EPSG * mediator/factory code. * * @author Cory Horner (Refractions Research) * * @source $URL$ */ public class OracleDialectEpsgMediatorConnectionLeakOnlineTest extends OracleOnlineTestCase { final static int RUNNER_COUNT = 3; final static int ITERATIONS = 3; final static int MAX_TIME = 2 * 60 * 1000; final static int MAX_WORKERS = 2; final static boolean VERBOSE = false; OracleDialectEpsgMediator mediator; BasicDataSource wrappedDataSource; String[] codes; Hints hints; protected void connect() throws Exception { super.connect(); hints = new Hints(Hints.CACHE_POLICY, "none"); hints.put(Hints.AUTHORITY_MAX_ACTIVE, new Integer(MAX_WORKERS)); if (datasource == null) { fail("no datasource available"); } wrappedDataSource = new BasicDataSource(){ { this.dataSource = datasource; } }; mediator = new OracleDialectEpsgMediator(80, hints, wrappedDataSource); codes = OracleDialectEpsgMediatorOnlineStressTest.getCodes(); } public void testLeak() throws Throwable { TestRunnable runners[] = new TestRunnable[RUNNER_COUNT]; for (int i = 0; i < RUNNER_COUNT; i++) { ClientThread thread = new OracleDialectEpsgMediatorOnlineStressTest.ClientThread(i, mediator); thread.iterations = ITERATIONS; runners[i] = thread; } MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(runners, null); mttr.runTestRunnables(MAX_TIME); //count exceptions and metrics int exceptions = 0; for (int i = 0; i < RUNNER_COUNT; i++) { ClientThread thread = (ClientThread) runners[i]; exceptions += thread.exceptions; } //destroy the mediator, check for open connections or exceptions mediator.dispose(); assertEquals(0, wrappedDataSource.getNumActive()); assertEquals(0, exceptions); } }