5151import java .util .concurrent .TimeUnit ;
5252import java .util .concurrent .atomic .AtomicBoolean ;
5353import java .util .concurrent .atomic .AtomicInteger ;
54+ import java .util .function .Function ;
5455
5556import javax .management .MBeanServer ;
5657import javax .management .ObjectName ;
@@ -1002,21 +1003,37 @@ void testAddObjectRespectsMaxIdleLimit() throws Exception {
10021003 }
10031004
10041005 @ RepeatedTest (10 )
1005- @ Timeout (value = 60000 , unit = TimeUnit .MILLISECONDS )
1006- void testAddObjectConcurrentCallsRespectsMaxIdle () throws Exception {
1006+ @ Timeout (value = 10 , unit = TimeUnit .SECONDS )
1007+ void testAddObjectConcurrentCallsRespectsMaxIdleLimit () throws Exception {
1008+ final int maxIdleLimit = 5 ;
1009+ final int numThreads = 10 ;
1010+ final CyclicBarrier barrier = new CyclicBarrier (numThreads );
1011+
1012+ withConcurrentCallsRespectMaxIdle (maxIdleLimit , numThreads , pool -> getRunnables (numThreads , barrier , pool ));
1013+ }
1014+
1015+
1016+ @ RepeatedTest (10 )
1017+ @ Timeout (value = 10 , unit = TimeUnit .SECONDS )
1018+ void testReturnObjectConcurrentCallsRespectsMaxIdleLimit () throws Exception {
1019+ final int maxIdleLimit = 5 ;
1020+ final int numThreads = 200 ;
1021+ final CyclicBarrier barrier = new CyclicBarrier (numThreads );
1022+
1023+ withConcurrentCallsRespectMaxIdle (maxIdleLimit , numThreads , pool -> getReturnRunnables (numThreads , barrier , pool ));
1024+ }
1025+
1026+ void withConcurrentCallsRespectMaxIdle (int maxIdleLimit , int numThreads , Function <GenericObjectPool <String >, List <Runnable >> operation ) throws Exception {
10071027 final GenericObjectPoolConfig <String > config = new GenericObjectPoolConfig <>();
10081028 config .setJmxEnabled (false );
10091029 try (GenericObjectPool <String > pool = new GenericObjectPool <>(new SimpleFactory (), config )) {
10101030 assertEquals (0 , pool .getNumIdle (), "should be zero idle" );
1011- final int maxIdleLimit = 5 ;
1012- final int numThreads = 10 ;
10131031 pool .setMaxIdle (maxIdleLimit );
10141032 pool .setMaxTotal (-1 );
10151033
1016- final CyclicBarrier barrier = new CyclicBarrier (numThreads );
1017- List <Runnable > tasks = getRunnables (numThreads , barrier , pool );
1034+ final List <Runnable > tasks = operation .apply (pool );
10181035
1019- ExecutorService executorService = Executors .newFixedThreadPool (numThreads );
1036+ final ExecutorService executorService = Executors .newFixedThreadPool (numThreads );
10201037 try {
10211038 tasks .forEach (executorService ::submit );
10221039 executorService .shutdown ();
@@ -1032,36 +1049,6 @@ void testAddObjectConcurrentCallsRespectsMaxIdle() throws Exception {
10321049 }
10331050 }
10341051
1035- @ RepeatedTest (10 )
1036- @ Timeout (value = 60000 , unit = TimeUnit .MILLISECONDS )
1037- void testReturnObjectRespectsMaxIdleLimit () throws Exception {
1038- final GenericObjectPoolConfig <String > config = new GenericObjectPoolConfig <>();
1039- config .setJmxEnabled (false );
1040- try (final GenericObjectPool <String > pool = new GenericObjectPool <>(new SimpleFactory (), config )) {
1041- assertEquals (0 , pool .getNumIdle (), "should be zero idle" );
1042- final int maxIdleLimit = 10 ;
1043- final int numThreads = 200 ;
1044-
1045- pool .setMaxTotal (-1 );
1046- pool .setMaxIdle (maxIdleLimit );
1047-
1048- final CyclicBarrier barrier = new CyclicBarrier (numThreads );
1049- List <Runnable > tasks = getReturnRunnables (numThreads , barrier , pool );
1050-
1051- ExecutorService executorService = Executors .newFixedThreadPool (numThreads );
1052- try {
1053- tasks .forEach (executorService ::submit );
1054- executorService .shutdown ();
1055- assertTrue (executorService .awaitTermination (60 , TimeUnit .SECONDS ),
1056- "Executor did not terminate in time" );
1057- } finally {
1058- executorService .shutdownNow (); // Ensure cleanup
1059- }
1060-
1061- assertEquals (maxIdleLimit , pool .getNumIdle (),
1062- " Should not be more than " + maxIdleLimit + " idle objects" );
1063- }
1064- }
10651052
10661053 private List <Runnable > getRunnables (final int numThreads ,
10671054 final CyclicBarrier barrier ,
0 commit comments