/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.data.jdbc; import static org.junit.Assert.*; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import org.geotools.data.jdbc.datasource.DataSourceFinder; import org.geotools.data.jdbc.datasource.UnWrapper; import org.junit.Before; import org.junit.Test; /** * Uses the known target org.apache.commons.dbcp.DelegatingStatement to test out GenericUnWrapper in * isolation. * * @author Jody Garnett (Boundless) */ public class GenericUnWrapperTest { GenericUnWrapper unwrapper = new GenericUnWrapper(); @Before public void reset(){ // reset generic wrapper state GenericUnWrapper.CONNECTION_METHODS.remove(WrapperConnection.class); } @Test public void testUnwrapConnection() throws SQLException, NoSuchMethodException, SecurityException { Connection connection = new TestConnection(); Connection wrapper = new WrapperConnection( connection ); assertTrue( wrapper.isWrapperFor( Connection.class ) ); Connection unwrap = wrapper.unwrap( Connection.class ); assertSame( connection, unwrap ); UnWrapper unwrapper = new GenericUnWrapper(); assertFalse( unwrapper.canUnwrap( wrapper ) ); try { assertNull( unwrapper.unwrap( wrapper )); fail("Cannot unwrap yet"); } catch (Exception expected){ } GenericUnWrapper.CONNECTION_METHODS.put(WrapperConnection.class, WrapperConnection.class.getMethod("getUnderlyingConnection", null)); assertTrue( unwrapper.canUnwrap( wrapper ) ); assertSame( connection, unwrapper.unwrap( wrapper ) ); } @Test public void testSPIRegistration() throws Exception { Connection connection = new TestConnection(); Connection wrapper = new WrapperConnection( connection ); UnWrapper uw = DataSourceFinder.getUnWrapper( wrapper ); if( uw != null ){ assertTrue("picked up by jdbc4 extractor", uw instanceof SpringUnWrapper ); } GenericUnWrapper.CONNECTION_METHODS.put(WrapperConnection.class, WrapperConnection.class.getMethod("getUnderlyingConnection", null)); uw = DataSourceFinder.getUnWrapper( wrapper ); assertNotNull("registed and canUnwrap",uw); if( uw instanceof GenericUnWrapper ){ assertSame( "Generic unwrapper is working", connection, uw.unwrap( wrapper )); } } }