content: package com.alibaba.druid.bvt.pool;
  
  import com.alibaba.druid.pool.DruidDataSource;
  import junit.framework.TestCase;
  
  import java.sql.Connection;
  import java.util.concurrent.CountDownLatch;
  import java.util.concurrent.atomic.AtomicInteger;
  
  /**
   * 这个场景测试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();
  
          assertEquals(2, errorCount.get());
  
          conn.close();
      }
  }
  