package com.alibaba.druid.bvt.pool; import java.sql.Connection; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; /** * 这个场景测试initialSize > maxActive * * @author wenshao [szujobs@hotmail.com] */ public class DruidDataSourceTest_maxWait extends TestCase { private DruidDataSource dataSource; protected void setUp() throws Exception { dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setTestOnBorrow(false); dataSource.setMaxActive(1); dataSource.setMaxWait(30); dataSource.setInitialSize(1); dataSource.init(); } protected void tearDown() throws Exception { dataSource.close(); } public void test_maxWait() throws Exception { Connection conn = dataSource.getConnection(); final AtomicInteger errorCount = new AtomicInteger(); final CountDownLatch endLatch = new CountDownLatch(2); Thread t1 = new Thread("t-1") { public void run() { try { dataSource.getConnection(); } catch (Exception e) { errorCount.incrementAndGet(); } finally { endLatch.countDown(); } } }; Thread t2 = new Thread("t-2") { public void run() { try { dataSource.getConnection(); } catch (Exception e) { errorCount.incrementAndGet(); } finally { endLatch.countDown(); } } }; t1.start(); t2.start(); Thread.sleep(10); t1.interrupt(); endLatch.await(); Assert.assertEquals(2, errorCount.get()); conn.close(); } }