// Copyright (c) 2005 Dustin Sallings <dustin@spy.net>
package net.spy.pool;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;
import junit.framework.TestCase;
import net.spy.util.SpyConfig;
/**
* Object pool testing.
*/
public class ObjectPoolTest extends TestCase {
/**
* Get an instance of ObjectPoolTest.
*/
public ObjectPoolTest(String name) {
super(name);
}
/**
* Basic object pool test.
*/
@SuppressWarnings("unchecked")
public void testBasicObjectPool() throws Exception {
SpyConfig conf=new SpyConfig();
conf.put("test.min", "1");
conf.put("test.start", "1");
conf.put("test.yellow", "90");
conf.put("test.max", "10");
// Create the pool
ObjectPool op=new ObjectPool(conf);
op.createPool("test", new PlainObjectFiller("test", conf));
assertTrue(op.hasPool("test"));
assertEquals(1, op.numPools());
// Just to exercise the code.
String.valueOf(op);
Collection<PooledObject> pooledObs=new ArrayList<PooledObject>(10);
for(int i=0; i<10; i++) {
pooledObs.add(op.getObject("test"));
}
assertEquals(10, pooledObs.size());
try {
PooledObject po=op.getObject("test");
fail("Pool gave me an object when it should be empty: " + po);
} catch(PoolException e) {
// pass
}
// Return them all to the pool
Collection<Object> objectsFromPool=new TreeSet<Object>();
for(Iterator i=pooledObs.iterator(); i.hasNext();) {
PooledObject po=(PooledObject)i.next();
objectsFromPool.add(po.getObject());
po.checkIn();
i.remove();
}
/*
// Try this again
Collection pooledObs2=new ArrayList(10);
for(int i=0; i<10; i++) {
pooledObs2.add(op.getObject("test"));
}
Collection objectsFromPool2=new TreeSet();
for(Iterator i=pooledObs2.iterator(); i.hasNext();) {
PooledObject po=(PooledObject)i.next();
objectsFromPool2.add(po.getObject());
po.checkIn();
i.remove();
}
assertEquals(objectsFromPool, objectsFromPool2);
*/
op.prune();
}
private static final class PlainObjectFiller extends PoolFiller {
private int id=0;
public PlainObjectFiller(String nm, SpyConfig cnf) {
super(nm, cnf);
}
@Override
public PoolAble getObject() throws PoolException {
return(new PlainPoolAble(new Integer(id++), getPoolHash()));
}
}
private static final class PlainPoolAble extends PoolAble {
public PlainPoolAble(Object o, int h) {
super(o, h);
}
}
}