package com.vladmihalcea.flexypool; import com.vladmihalcea.flexypool.exception.CantAcquireConnectionException; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; /** * AbstractPoolAdapterIntegrationTest - Abstract Pool Adapter Integration Test * * @author Vlad Mihalcea */ public abstract class AbstractPoolAdapterIntegrationTest { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractPoolAdapterIntegrationTest.class); @Resource private FlexyPoolDataSource dataSource; public DataSource getDataSource() { return dataSource; } @Test public void test() throws SQLException { int index = 0; List<Connection> leasedConnections = new ArrayList<Connection>(); try { for(;hasMoreConnections(index);++index) { try { Connection connection = getConnection(index); leasedConnections.add(connection); } catch (UnsupportedOperationException e) { LOGGER.info("DataSource doesn't support adjusting pool size", e); } } } catch (SQLException e) { assertTrue(e instanceof CantAcquireConnectionException); verifyLeasedConnections(leasedConnections); } finally { closeConnection(leasedConnections); } } protected boolean hasMoreConnections(int index) { return true; } private Connection getConnection(int index) throws SQLException { LOGGER.info("Try to get connection {}", index); Connection connection = dataSource.getConnection(); assertNotNull(connection); LOGGER.info("Got connection {}", connection); return connection; } protected void verifyLeasedConnections(List<Connection> leasedConnections) { assertEquals(5, leasedConnections.size()); } protected void closeConnection(List<Connection> leasedConnections) { for(Connection leasedConnection : leasedConnections) { try { leasedConnection.close(); } catch (SQLException e) { fail(e.getMessage()); } } } }