package com.github.wicketoracle; import java.sql.SQLException; import oracle.ucp.jdbc.JDBCConnectionPoolStatistics; import oracle.ucp.jdbc.PoolDataSource; import oracle.ucp.UniversalConnectionPoolException; import org.apache.wicket.authentication.AuthenticatedWebApplication; import org.apache.wicket.protocol.http.WebRequestCycleProcessor; import org.apache.wicket.request.IRequestCycleProcessor; import org.apache.wicket.util.tester.FormTester; import org.apache.wicket.util.tester.WicketTester; import org.junit.Assert; import com.github.wicketoracle.app.login.LoginPage; import com.github.wicketoracle.oracle.ucp.UCPMgr; import com.github.wicketoracle.session.Session; public class AppTester extends WicketTester { private static boolean isUCPSetup = false; private static final int ABANDONED_CONNECTION_TIMEOUT = Integer.parseInt( System.getProperty( "unit.test.ucp.abandoned.connection.timeout" ) ); private static final String CONNECTION_FACTORY_CLASS_NAME = System.getProperty( "unit.test.connection.pool.class" ); private static final String CONNECTION_POOL_NAME = System.getProperty( "unit.test.connection.pool.name" ); private static final String CONNECTION_POOL_URL = System.getProperty( "unit.test.connection.pool.url" ); private static final int INITIAL_POOL_SIZE = Integer.parseInt( System.getProperty( "unit.test.ucp.initial.pool.size" ) ); private static final int MAX_CACHED_STATEMENTS = Integer.parseInt( System.getProperty( "unit.test.ucp.max.cached.statements" ) ); private static final String UNIT_TEST_PASSWORD = System.getProperty( "unit.test.password" ); private static final String UNIT_TEST_USER = System.getProperty( "unit.test.user" ); /** * */ public AppTester() { super ( /*application*/ new AuthenticatedWebApplication() { @Override protected final IRequestCycleProcessor newRequestCycleProcessor() { return new WebRequestCycleProcessor(); } /** * @see org.apache.wicket.Application#getHomePage() */ public final Class<LoginPage> getHomePage() { return LoginPage.class; } /** * @see org.apache.wicket.authentication.AuthenticatedWebApplication#getSignInPageClass() * @return The application sign-in page. */ @Override protected final Class<LoginPage> getSignInPageClass() { return LoginPage.class; } /** * @see org.apache.wicket.authentication.AuthenticatedWebApplication#getWebSessionClass() * @return An authorised principal. */ @Override protected final Class<Session> getWebSessionClass() { return Session.class; } } ); setupUCP(); } /** * */ private void setupUCP() { if ( ! AppTester.isUCPSetup ) { System.out.println( "Connection Factory Class Name -> " + CONNECTION_FACTORY_CLASS_NAME ); System.out.println( "Connection Pool Name -> " + CONNECTION_POOL_NAME ); System.out.println( "Connection Pool URL -> " + CONNECTION_POOL_URL ); System.out.println( "Initial Pool Size -> " + INITIAL_POOL_SIZE ); System.out.println( "Max Cached Statements -> " + MAX_CACHED_STATEMENTS ); try { UCPMgr.setupUCP ( ABANDONED_CONNECTION_TIMEOUT , CONNECTION_FACTORY_CLASS_NAME , CONNECTION_POOL_NAME , CONNECTION_POOL_URL , INITIAL_POOL_SIZE , MAX_CACHED_STATEMENTS ); AppTester.isUCPSetup = true; System.out.println( "Setup of UCP successful" ); } catch ( UniversalConnectionPoolException ucpe ) { System.err.println( "Exception when configuring Universal Connection Pool -> " + ucpe.getClass().toString() + " -> " + ucpe.getLocalizedMessage() ); } catch ( SQLException sqle ) { System.err.println( "Exception when configuring Universal Connection Pool -> " + sqle.getClass().toString() + " -> " + sqle.getLocalizedMessage() ); } } } /** * Authenticate using the specified credentials * * @param pUsername * @param pPassword */ public final void doLogin( final String pUsername , final String pPassword ) { startPage( LoginPage.class ); FormTester formTester = newFormTester( "loginForm" ); formTester.setValue( "username" , pUsername ); formTester.setValue( "password" , pPassword ); formTester.submit(); assertNoLeakedConnections(); } /** * Authenticate using the user created for unit testing */ public final void doUnitTestLogin() { if ( this.getWicketSession() != null ) { doLogin( UNIT_TEST_USER , UNIT_TEST_PASSWORD ); } } public void assertNoLeakedConnections() { JDBCConnectionPoolStatistics ucpStatistics = UCPMgr.getUCPDataSource().getStatistics(); Assert.assertEquals( ucpStatistics.getCumulativeConnectionBorrowedCount() , ucpStatistics.getCumulativeConnectionReturnedCount() ); } }