content: package com.alibaba.druid.pvt.pool;
  
  import com.alibaba.druid.pool.DruidDataSource;
  import com.alibaba.druid.util.JdbcUtils;
  import junit.framework.TestCase;
  
  import java.lang.management.ManagementFactory;
  import java.sql.Connection;
  import java.util.concurrent.Executors;
  import java.util.concurrent.ScheduledExecutorService;
  
  public class Large10KTest extends TestCase {
      private DruidDataSource[] dataSources;
      private ScheduledExecutorService scheduler;
  
      protected void setUp() throws Exception {
          long xmx = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() / (1000 * 1000); // m
  
          final int dataSourceCount;
  
          if (xmx <= 256) {
              dataSourceCount = 1024 * 1;
          } else if (xmx <= 512) {
              dataSourceCount = 1024 * 2;
          } else if (xmx <= 1024) {
              dataSourceCount = 1024 * 4;
          } else if (xmx <= 2048) {
              dataSourceCount = 1024 * 8;
          } else {
              dataSourceCount = 1024 * 16;
          }
  
          dataSources = new DruidDataSource[dataSourceCount];
  
          scheduler = Executors.newScheduledThreadPool(10);
          for (int i = 0; i < dataSources.length; ++i) {
              DruidDataSource dataSource = new DruidDataSource();
              dataSource.setUrl("jdbc:mock:xxx");
              dataSource.setCreateScheduler(scheduler);
              dataSource.setDestroyScheduler(scheduler);
              dataSource.setTestOnBorrow(false);
              dataSource.setTestWhileIdle(false);
  
              dataSources[i] = dataSource;
          }
      }
  
      protected void tearDown() throws Exception {
          for (int i = 0; i < dataSources.length; ++i) {
              JdbcUtils.close(dataSources[i]);
          }
          scheduler.shutdown();
      }
  
      public void test_large() throws Exception {
          Connection[] connections = new Connection[dataSources.length * 8];
          for (int i = 0; i < dataSources.length; ++i) {
              for (int j = 0; j < 8; ++j) {
                  connections[i * 8 + j] = dataSources[i].getConnection();
              }
          }
  
          for (int i = 0; i < dataSources.length; ++i) {
              for (int j = 0; j < 8; ++j) {
                  connections[i * 8 + j].close();
              }
          }
      }
  }
  