001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.pool.impl;
019
020 import org.apache.commons.pool.TestObjectPoolFactory;
021 import org.apache.commons.pool.ObjectPoolFactory;
022 import org.apache.commons.pool.PoolableObjectFactory;
023 import org.apache.commons.pool.MethodCallPoolableObjectFactory;
024 import junit.framework.Test;
025 import junit.framework.TestSuite;
026
027 import java.util.NoSuchElementException;
028
029 /**
030 * Tests for {@link GenericObjectPoolFactory}.
031 *
032 * @author Sandy McArthur
033 * @version $Revision: 604116 $ $Date: 2007-12-14 02:03:04 -0500 (Fri, 14 Dec 2007) $
034 */
035 public class TestGenericObjectPoolFactory extends TestObjectPoolFactory {
036 public TestGenericObjectPoolFactory(final String name) {
037 super(name);
038 }
039
040 public static Test suite() {
041 return new TestSuite(TestGenericObjectPoolFactory.class);
042 }
043
044 protected ObjectPoolFactory makeFactory(final PoolableObjectFactory objectFactory) throws UnsupportedOperationException {
045 return new GenericObjectPoolFactory(objectFactory);
046 }
047
048 public void testConstructors() throws Exception {
049 GenericObjectPoolFactory factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory());
050 GenericObjectPool pool;
051 factory.createPool().close();
052
053 final GenericObjectPool.Config config = new GenericObjectPool.Config();
054 config.maxActive = 1;
055 config.maxIdle = 2;
056 config.maxWait = 3;
057 config.minIdle = 4;
058 config.minEvictableIdleTimeMillis = 5;
059 config.numTestsPerEvictionRun = 6;
060 config.softMinEvictableIdleTimeMillis = 7;
061 config.testOnBorrow = true;
062 config.testOnReturn = false;
063 config.testWhileIdle = true;
064 config.lifo = false;
065 config.timeBetweenEvictionRunsMillis = 8;
066 config.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_GROW;
067 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), config);
068 pool = (GenericObjectPool)factory.createPool();
069 assertEquals(1, pool.getMaxActive());
070 assertEquals(2, pool.getMaxIdle());
071 assertEquals(3, pool.getMaxWait());
072 assertEquals(4, pool.getMinIdle());
073 assertEquals(5, pool.getMinEvictableIdleTimeMillis());
074 assertEquals(6, pool.getNumTestsPerEvictionRun());
075 assertEquals(7, pool.getSoftMinEvictableIdleTimeMillis());
076 assertEquals(true, pool.getTestOnBorrow());
077 assertEquals(false, pool.getTestOnReturn());
078 assertEquals(true, pool.getTestWhileIdle());
079 assertEquals(false, pool.getLifo());
080 assertEquals(8, pool.getTimeBetweenEvictionRunsMillis());
081 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
082 pool.borrowObject();
083 pool.close();
084
085
086 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1);
087 pool = (GenericObjectPool)factory.createPool();
088 assertEquals(1, pool.getMaxActive());
089 pool.borrowObject();
090 pool.close();
091
092
093 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_BLOCK, 125);
094 pool = (GenericObjectPool)factory.createPool();
095 assertEquals(1, pool.getMaxActive());
096 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_BLOCK, pool.getWhenExhaustedAction());
097 assertEquals(125, pool.getMaxWait());
098 pool.borrowObject();
099 long startTime = System.currentTimeMillis();
100 try {
101 pool.borrowObject();
102 fail();
103 } catch (NoSuchElementException nsee) {
104 // expected
105 }
106 long delay = System.currentTimeMillis() - startTime;
107 assertTrue("delay: " + delay, delay > 100);
108 pool.close();
109
110
111 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, true, false);
112 pool = (GenericObjectPool)factory.createPool();
113 assertEquals(1, pool.getMaxActive());
114 assertEquals(2, pool.getMaxWait());
115 assertEquals(true, pool.getTestOnBorrow());
116 assertEquals(false, pool.getTestOnReturn());
117 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
118 pool.borrowObject();
119 pool.close();
120
121
122 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, 3);
123 pool = (GenericObjectPool)factory.createPool();
124 assertEquals(1, pool.getMaxActive());
125 assertEquals(2, pool.getMaxWait());
126 assertEquals(3, pool.getMaxIdle());
127 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
128 pool.borrowObject();
129 pool.close();
130
131
132 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, 3, true, false);
133 pool = (GenericObjectPool)factory.createPool();
134 assertEquals(1, pool.getMaxActive());
135 assertEquals(2, pool.getMaxWait());
136 assertEquals(3, pool.getMaxIdle());
137 assertEquals(true, pool.getTestOnBorrow());
138 assertEquals(false, pool.getTestOnReturn());
139 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
140 pool.borrowObject();
141 pool.close();
142
143
144 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, 3, true, false, 4, 5, 6, false);
145 pool = (GenericObjectPool)factory.createPool();
146 assertEquals(1, pool.getMaxActive());
147 assertEquals(2, pool.getMaxWait());
148 assertEquals(3, pool.getMaxIdle());
149 assertEquals(4, pool.getTimeBetweenEvictionRunsMillis());
150 assertEquals(5, pool.getNumTestsPerEvictionRun());
151 assertEquals(6, pool.getMinEvictableIdleTimeMillis());
152 assertEquals(true, pool.getTestOnBorrow());
153 assertEquals(false, pool.getTestOnReturn());
154 assertEquals(false, pool.getTestWhileIdle());
155 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
156 pool.borrowObject();
157 pool.close();
158
159
160 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, 3, 4, true, false, 5, 6, 7, true);
161 pool = (GenericObjectPool)factory.createPool();
162 assertEquals(1, pool.getMaxActive());
163 assertEquals(2, pool.getMaxWait());
164 assertEquals(3, pool.getMaxIdle());
165 assertEquals(4, pool.getMinIdle());
166 assertEquals(5, pool.getTimeBetweenEvictionRunsMillis());
167 assertEquals(6, pool.getNumTestsPerEvictionRun());
168 assertEquals(7, pool.getMinEvictableIdleTimeMillis());
169 assertEquals(true, pool.getTestOnBorrow());
170 assertEquals(false, pool.getTestOnReturn());
171 assertEquals(true, pool.getTestWhileIdle());
172 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
173 pool.borrowObject();
174 pool.close();
175
176
177 factory = new GenericObjectPoolFactory(new MethodCallPoolableObjectFactory(), 1, GenericObjectPool.WHEN_EXHAUSTED_GROW, 2, 3, 4, true, false, 5, 6, 7, true, 8, false);
178 pool = (GenericObjectPool)factory.createPool();
179 assertEquals(1, pool.getMaxActive());
180 assertEquals(2, pool.getMaxWait());
181 assertEquals(3, pool.getMaxIdle());
182 assertEquals(4, pool.getMinIdle());
183 assertEquals(5, pool.getTimeBetweenEvictionRunsMillis());
184 assertEquals(6, pool.getNumTestsPerEvictionRun());
185 assertEquals(7, pool.getMinEvictableIdleTimeMillis());
186 assertEquals(8, pool.getSoftMinEvictableIdleTimeMillis());
187 assertEquals(true, pool.getTestOnBorrow());
188 assertEquals(false, pool.getTestOnReturn());
189 assertEquals(true, pool.getTestWhileIdle());
190 assertEquals(false, pool.getLifo());
191 assertEquals(GenericObjectPool.WHEN_EXHAUSTED_GROW, pool.getWhenExhaustedAction());
192 pool.borrowObject();
193 pool.close();
194 }
195 }