Author: sandymac Date: Mon Mar 27 21:04:36 2006 New Revision: 389394 URL: http://svn.apache.org/viewcvs?rev=389394&view=rev Log: Unit tests for the composite Tracker implementations.
Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java (with props) jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java (with props) jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java (with props) jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java (with props) jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java (with props) Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/ReferenceTracker.java jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Tracker.java jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/ReferenceTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/ReferenceTracker.java?rev=389394&r1=389393&r2=389394&view=diff ============================================================================== --- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/ReferenceTracker.java (original) +++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/ReferenceTracker.java Mon Mar 27 21:04:36 2006 @@ -53,6 +53,9 @@ private transient int lost = 0; public void borrowed(final Object obj) { + if (obj == null) { + throw new IllegalArgumentException("Cannot track null borrowed from pool."); + } workQueue(); final IdentityReference ref; synchronized (rq) { @@ -79,6 +82,9 @@ * @throws IllegalStateException when an object that wasn't brorrowed from this pool is returned. */ public void returned(final Object obj) throws IllegalStateException { + if (obj == null) { + throw new IllegalArgumentException("Cannot track null returned to the pool."); + } workQueue(); final IdentityKey key = new IdentityKey(obj); final IdentityReference ref = (IdentityReference)map.remove(key); Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Tracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Tracker.java?rev=389394&r1=389393&r2=389394&view=diff ============================================================================== --- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Tracker.java (original) +++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/Tracker.java Mon Mar 27 21:04:36 2006 @@ -40,20 +40,20 @@ * [EMAIL PROTECTED] PoolableObjectFactory#activateObject(Object) activated} and * [EMAIL PROTECTED] PoolableObjectFactory#validateObject(Object) validated} and is about to be returned to the client. * - * <p>Objects created via [EMAIL PROTECTED] ObjectPool#addObject()} are also "borrowed" so that when - * [EMAIL PROTECTED] ObjectPool#returnObject(Object)} [EMAIL PROTECTED] #returned(Object) returns} that object it isn't unexpected. - * * @param obj was borrowed from the pool. + * @throws IllegalArgumentException may be thrown if <code>null</code> is not allowed. */ - public void borrowed(Object obj); + public void borrowed(Object obj) throws IllegalArgumentException; /** * An object is being [EMAIL PROTECTED] ObjectPool#returnObject(Object) returned} to the pool. * [EMAIL PROTECTED] ObjectPool#invalidateObject(Object) Invalid} objects are also "returned" via this method. * * @param obj being returned to the pool. + * @throws IllegalArgumentException may be thrown if <code>null</code> is not allowed. + * @throws IllegalStateException may be thrown if an object is returned that wasn't borrowed. */ - public void returned(Object obj); + public void returned(Object obj) throws IllegalArgumentException, IllegalStateException; /** * The number of "borrowed" or active objects from the pool. Modified: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java?rev=389394&r1=389393&r2=389394&view=diff ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java (original) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java Mon Mar 27 21:04:36 2006 @@ -38,6 +38,7 @@ public static Test suite() { final TestSuite suite = new TestSuite(); + // Lenders unit tests suite.addTest(TestFifoLender.suite()); suite.addTest(TestIdleEvictorLender.suite()); @@ -45,8 +46,14 @@ suite.addTest(TestLifoLender.suite()); suite.addTest(TestNullLender.suite()); suite.addTest(TestSoftLender.suite()); + // Managers unit tests + // Tackers unit tests + suite.addTest(TestNullTracker.suite()); + suite.addTest(TestReferenceTracker.suite()); + suite.addTest(TestDebugTracker.suite()); + suite.addTest(TestSimpleTracker.suite()); // Remaining unit tests suite.addTest(TestCompositeObjectPool.suite()); Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java?rev=389394&view=auto ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java (added) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java Mon Mar 27 21:04:36 2006 @@ -0,0 +1,44 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.pool.composite; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * Unit tests for [EMAIL PROTECTED] DebugTracker}. + * Note: This test will generate some output to stderr. + * + * @author Sandy McArthur + * @version $Revision$ $Date$ + */ +public class TestDebugTracker extends TestReferenceTracker { + /** + * Constructs a test case with the given name. + */ + public TestDebugTracker(final String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(TestDebugTracker.class); + } + + protected Tracker createTracker() { + return new DebugTracker(); + } +} Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestDebugTracker.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java?rev=389394&r1=389393&r2=389394&view=diff ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java (original) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java Mon Mar 27 21:04:36 2006 @@ -17,8 +17,6 @@ package org.apache.commons.pool.composite; import junit.framework.TestCase; -import junit.framework.Test; -import junit.framework.TestSuite; import org.apache.commons.pool.BasePoolableObjectFactory; import org.apache.commons.pool.PoolableObjectFactory; Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java?rev=389394&view=auto ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java (added) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java Mon Mar 27 21:04:36 2006 @@ -0,0 +1,43 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.pool.composite; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * Tests for [EMAIL PROTECTED] NullTracker}. + * + * @author Sandy McArthur + * @version $Revision$ $Date$ + */ +public class TestNullTracker extends TestTracker { + /** + * Constructs a test case with the given name. + */ + public TestNullTracker(final String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(TestNullTracker.class); + } + + protected Tracker createTracker() { + return new NullTracker(); + } +} Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullTracker.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java?rev=389394&view=auto ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java (added) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java Mon Mar 27 21:04:36 2006 @@ -0,0 +1,103 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.pool.composite; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import java.util.List; +import java.util.LinkedList; + +/** + * Unit tests for [EMAIL PROTECTED] ReferenceTracker}s. + * + * @author Sandy McArthur + * @version $Revision$ $Date$ + */ +public class TestReferenceTracker extends TestTracker { + /** + * Constructs a test case with the given name. + */ + public TestReferenceTracker(final String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(TestReferenceTracker.class); + } + + protected Tracker createTracker() { + return new ReferenceTracker(); + } + + public void testBorrowed() { + super.testBorrowed(); + + final Tracker tracker = createTracker(); + try { + tracker.borrowed(null); + fail("Tracking of null is now allowed."); + } catch (IllegalArgumentException iae) { + // expected + } + } + + public void testLostBorrowed() { + final Tracker tracker = createTracker(); + + Object obj = new Object(); + tracker.borrowed(obj); + assertEquals(1, tracker.getBorrowed()); + obj = null; + + final List garbage = new LinkedList(); + final Runtime runtime = Runtime.getRuntime(); + while (tracker.getBorrowed() > 0) { + try { + garbage.add(new byte[Math.min(1024 * 1024, (int)runtime.freeMemory()/2)]); + } catch (OutOfMemoryError oome) { + System.gc(); + } + System.gc(); + } + garbage.clear(); + System.gc(); + + assertEquals(0, tracker.getBorrowed()); + } + + public void testReturned() { + super.testReturned(); + + final Tracker tracker = createTracker(); + try { + tracker.returned(null); + fail("Tracking of null is now allowed."); + } catch (IllegalArgumentException iae) { + // expected + } + + try { + tracker.returned(new Object()); + fail("Cannot return an object that wasn't borrowed."); + } catch (IllegalStateException ise) { + // expected + } + + + } +} Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestReferenceTracker.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java?rev=389394&view=auto ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java (added) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java Mon Mar 27 21:04:36 2006 @@ -0,0 +1,55 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.pool.composite; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * Unit tests for [EMAIL PROTECTED] SimpleTracker}. + * + * @author Sandy McArthur + * @version $Revision$ $Date$ + */ +public class TestSimpleTracker extends TestTracker { + /** + * Constructs a test case with the given name. + */ + public TestSimpleTracker(final String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(TestSimpleTracker.class); + } + + protected Tracker createTracker() { + return new SimpleTracker(); + } + + public void testReturned() { + super.testReturned(); + + final Tracker tracker = createTracker(); + try { + tracker.returned(new Object()); // should drive counter negative + fail("Cannot return more objects than were borrowed."); + } catch (IllegalStateException ise) { + // expected + } + } +} Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSimpleTracker.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Added: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java?rev=389394&view=auto ============================================================================== --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java (added) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java Mon Mar 27 21:04:36 2006 @@ -0,0 +1,66 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.pool.composite; + +import junit.framework.TestCase; + +/** + * Common unit tests for all [EMAIL PROTECTED] Tracker}s. + * + * @author Sandy McArthur + * @version $Revision$ $Date$ + */ +public abstract class TestTracker extends TestCase { + /** + * Constructs a test case with the given name. + */ + public TestTracker(final String name) { + super(name); + } + + protected abstract Tracker createTracker(); + + public void testBorrowed() { + final Tracker tracker = createTracker(); + + tracker.borrowed(new Object()); + } + + public void testReturned() { + final Tracker tracker = createTracker(); + + final Object o = new Object(); + tracker.borrowed(o); + tracker.returned(o); + } + + public void testGetBorrowed() { + final Tracker tracker = createTracker(); + if (tracker.getBorrowed() >= 0) { + final Object obj = new Object(); + assertEquals(0, tracker.getBorrowed()); + tracker.borrowed(obj); + assertEquals(1, tracker.getBorrowed()); + tracker.returned(obj); + assertEquals(0, tracker.getBorrowed()); + } + } + + public void testToString() { + createTracker().toString(); + } +} Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestTracker.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]