Author: sandymac
Date: Mon Mar 27 19:46:23 2006
New Revision: 389381

URL: http://svn.apache.org/viewcvs?rev=389381&view=rev
Log:
Unit tests for the composite Lender implementations.
Bug fix in EvictorLender where two EvictorLender instances
chained would delay getNumIdle from detecting idle objects
that have been evicted.

Added:
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
   (with props)
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
   (with props)
Modified:
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/NullLender.java
    
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/TestAll.java
    
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestCompositeObjectPool.java

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java?rev=389381&r1=389380&r2=389381&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/EvictorLender.java
 Mon Mar 27 19:46:23 2006
@@ -83,7 +83,7 @@
     }
 
     /**
-     * Return the size of the idle object pool. Also removes any broken [EMAIL 
PROTECTED] EvictorLender.EvictorReference}s so the
+     * Return the size of the idle object pool. Also removes any broken [EMAIL 
PROTECTED] Lender.LenderReference}s so the
      * size is more accurate.
      *
      * @return the size of the idle object pool the lender is accessing.
@@ -93,8 +93,12 @@
             synchronized (getObjectPool().getPool()) {
                 final Iterator iter = super.listIterator();
                 while (iter.hasNext()) {
-                    final EvictorReference ref = (EvictorReference)iter.next();
-                    if (ref != null && ref.get() == null) {
+                    Object o = iter.next();
+                    // unwrap
+                    while (o instanceof LenderReference) {
+                        o = ((LenderReference)o).get();
+                    }
+                    if (o == null) {
                         iter.remove();
                     }
                 }

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/NullLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/NullLender.java?rev=389381&r1=389380&r2=389381&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/NullLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/NullLender.java
 Mon Mar 27 19:46:23 2006
@@ -28,20 +28,9 @@
  * @since #.#
  * @version $Revision$ $Date$
  */
-final class NullLender implements Lender, Serializable {
+final class NullLender extends AbstractLender implements Serializable {
 
     private static final long serialVersionUID = -135471856936204860L;
-
-    /**
-     * Called once to associate this manager with an object pool by the [EMAIL 
PROTECTED] CompositeObjectPool} constructor.
-     *
-     * @param objectPool the pool to associate with.
-     * @throws IllegalArgumentException if <code>objectPool</code> is 
<code>null</code>.
-     * @throws IllegalStateException if this method is called more than once.
-     */
-    public void setCompositeObjectPool(final CompositeObjectPool objectPool) 
throws IllegalArgumentException, IllegalStateException {
-        // nothing
-    }
 
     /**
      * Return <code>null</code>.

Modified: 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java?rev=389381&r1=389380&r2=389381&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/composite/SoftLender.java
 Mon Mar 27 19:46:23 2006
@@ -106,11 +106,8 @@
      * Make a [EMAIL PROTECTED] SoftReference} implement [EMAIL PROTECTED] 
LenderReference}.
      */
     private static class SoftLenderReference extends SoftReference implements 
LenderReference {
-        public SoftLenderReference(Object referent) {
+        SoftLenderReference(final Object referent) {
             super(referent);
-        }
-        public SoftLenderReference(Object referent, ReferenceQueue q) {
-            super(referent, q);
         }
     }
 

Modified: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/TestAll.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/TestAll.java?rev=389381&r1=389380&r2=389381&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/TestAll.java 
(original)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/TestAll.java 
Mon Mar 27 19:46:23 2006
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2004,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.
@@ -37,6 +37,7 @@
         
suite.addTest(org.apache.commons.pool.TestBaseKeyedPoolableObjectFactory.suite());
         suite.addTest(org.apache.commons.pool.TestPoolUtils.suite());
         suite.addTest(org.apache.commons.pool.impl.TestAll.suite());
+        suite.addTest(org.apache.commons.pool.composite.TestAll.suite());
         return suite;
     }
 

Added: 
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=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,63 @@
+/*
+ * 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;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * JUnit test suite for the [EMAIL PROTECTED] 
org.apache.commons.pool.composite}
+ * package.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestAll extends TestCase {
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestAll(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        final TestSuite suite = new TestSuite();
+        // Lenders unit tests
+        suite.addTest(TestFifoLender.suite());
+        suite.addTest(TestIdleEvictorLender.suite());
+        suite.addTest(TestInvalidEvictorLender.suite());
+        suite.addTest(TestLifoLender.suite());
+        suite.addTest(TestNullLender.suite());
+        suite.addTest(TestSoftLender.suite());
+        // Managers unit tests
+        // Tackers unit tests
+
+        // Remaining unit tests
+        suite.addTest(TestCompositeObjectPool.suite());
+        //suite.addTest(TestCompositeKeyedObjectPool.suite());
+        //suite.addTest(TestCompositeObjectPoolFactory.suite());
+        //suite.addTest(TestCompositeKeyedObjectPoolFactory.suite());
+        return suite;
+    }
+
+    public static void main(String args[]) {
+        String[] testCaseName = { TestAll.class.getName() };
+        TestRunner.main(testCaseName);
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestAll.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestCompositeObjectPool.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestCompositeObjectPool.java?rev=389381&r1=389380&r2=389381&view=diff
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestCompositeObjectPool.java
 (original)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestCompositeObjectPool.java
 Mon Mar 27 19:46:23 2006
@@ -28,6 +28,9 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
 /**
  * Test [EMAIL PROTECTED] CompositeObjectPool} and it's components.
  *
@@ -40,6 +43,10 @@
 
     public TestCompositeObjectPool(final String testName) {
         super(testName);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestCompositeObjectPool.class);
     }
 
     public void setUp() throws Exception {

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,116 @@
+/*
+ * 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 org.apache.commons.pool.PoolUtils;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Test that [EMAIL PROTECTED] FifoLender} is in fact a FIFO.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestFifoLender extends TestLender {
+    private static final Integer ZERO = new Integer(0);
+    private static final Integer ONE = new Integer(1);
+
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestFifoLender(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestFifoLender.class);
+    }
+
+    protected Lender createLender() {
+        return new FifoLender();
+    }
+
+    public void testBorrowAndRepay() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(lender);
+        final List list = cop.getPool();
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testBorrowWithArrayList() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(new ArrayList(), lender);
+        final List list = cop.getPool();
+
+        assertTrue(list instanceof ArrayList);
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testBorrowWithLinkedList() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(new LinkedList(), lender);
+        final List list = cop.getPool();
+
+        assertTrue(list instanceof LinkedList);
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    private static void borrowAndRepay(final Lender lender) {
+        Object obj = lender.borrow();
+        assertEquals(ZERO, obj);
+        lender.repay(obj);
+        obj = lender.borrow();
+        assertEquals(ONE, obj);
+        lender.repay(obj);
+        obj = lender.borrow();
+        assertEquals(ZERO, obj);
+        lender.repay(obj);
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestFifoLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,90 @@
+/*
+ * 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] IdleEvictorLender}.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestIdleEvictorLender extends TestLender {
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestIdleEvictorLender(final String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestIdleEvictorLender.class);
+    }
+
+    protected Lender createLender() throws Exception {
+        return createLender(60L * 1000L);
+    }
+
+    private IdleEvictorLender createLender(final long timeout) throws 
Exception {
+        final IdleEvictorLender idleEvictorLender = new IdleEvictorLender(new 
FifoLender());
+        idleEvictorLender.setIdleTimeoutMillis(timeout);
+        return idleEvictorLender;
+    }
+
+    public void testGetIdleTimeoutMillis() throws Exception {
+        final IdleEvictorLender lender = createLender(10);
+        assertEquals(10L, lender.getIdleTimeoutMillis());
+    }
+
+    public void testIdleEviction() throws Exception {
+        IdleEvictorLender lender = createLender(50L);
+        CompositeObjectPool cop = createPool(lender);
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        Thread.sleep(100L);
+        assertEquals(0, cop.getNumIdle());
+
+        cop.close();
+
+        // Test when IdleEvictorLender delegates to another EvictorLender
+        lender = new IdleEvictorLender(new InvalidEvictorLender(new 
FifoLender()));
+        lender.setIdleTimeoutMillis(50L);
+        cop = createPool(lender);
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        Thread.sleep(100L);
+        lender.size();
+        assertEquals(0, cop.getNumIdle());
+        cop.close();
+
+        // Test when another EvictorLender delegates to IdleEvictorLender
+        lender = new IdleEvictorLender(new FifoLender());
+        lender.setIdleTimeoutMillis(50L);
+        cop = createPool(new InvalidEvictorLender(lender));
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        Thread.sleep(100L);
+        lender.size();
+        assertEquals(0, cop.getNumIdle());
+        cop.close();
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestIdleEvictorLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,119 @@
+/*
+ * 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] InvalidEvictorLender}.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestInvalidEvictorLender extends TestLender {
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestInvalidEvictorLender(final String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestInvalidEvictorLender.class);
+    }
+
+    protected Lender createLender() throws Exception {
+        return createLender(60L * 1000L);
+    }
+
+    protected InvalidEvictorLender createLender(final long timeout) throws 
Exception {
+        final InvalidEvictorLender invalidEvictorLender = new 
InvalidEvictorLender(new FifoLender());
+        invalidEvictorLender.setValidationFrequencyMillis(timeout);
+        return invalidEvictorLender;
+    }
+
+    public void testValidationFrequencyMillis() throws Exception {
+        final InvalidEvictorLender lender = createLender(10L);
+        assertEquals(10L, lender.getValidationFrequencyMillis());
+        lender.setValidationFrequencyMillis(25L);
+        assertEquals(25L, lender.getValidationFrequencyMillis());
+        try {
+            lender.setValidationFrequencyMillis(-1L);
+            fail("Negative values are not legal for 
validationFrequencyMillis.");
+        } catch (IllegalArgumentException iae) {
+            // expected
+        }
+    }
+
+    public void testInvalidEviction() throws Exception {
+        InvalidEvictorLender lender = createLender(50L);
+        final ValidatePoolableObjectFactory vpof = new 
ValidatePoolableObjectFactory();
+        CompositeObjectPool cop = createPool(vpof, lender);
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        vpof.setValid(false);
+        Thread.sleep(100L);
+        assertEquals(0, cop.getNumIdle());
+        cop.close();
+
+        vpof.setValid(true);
+
+        // Test when InvalidEvictorLender delegates to another EvictorLender
+        lender = new InvalidEvictorLender(new IdleEvictorLender(new 
FifoLender()));
+        lender.setValidationFrequencyMillis(50L);
+        cop = createPool(vpof, lender);
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        vpof.setValid(false);
+        Thread.sleep(100L);
+        assertEquals(0, cop.getNumIdle());
+        cop.close();
+
+        vpof.setValid(true);
+
+        // Test when another EvictorLender delegates to InvalidEvictorLender
+        lender = new InvalidEvictorLender(new FifoLender());
+        lender.setValidationFrequencyMillis(50L);
+        cop = createPool(vpof, new IdleEvictorLender(lender));
+
+        cop.addObject();
+        assertEquals(1, cop.getNumIdle());
+        vpof.setValid(false);
+        Thread.sleep(100L);
+        assertEquals(0, cop.getNumIdle());
+        cop.close();
+    }
+
+    static class ValidatePoolableObjectFactory extends 
CountingPoolableObjectFactory {
+        private boolean valid = true;
+
+        public boolean validateObject(final Object obj) {
+            return valid;
+        }
+
+        public boolean isValid() {
+            return valid;
+        }
+
+        public void setValid(boolean valid) {
+            this.valid = valid;
+        }
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestInvalidEvictorLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
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=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,133 @@
+/*
+ * 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;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.pool.BasePoolableObjectFactory;
+import org.apache.commons.pool.PoolableObjectFactory;
+
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * Common unit tests for all [EMAIL PROTECTED] Lender}s.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public abstract class TestLender extends TestCase {
+    private CompositeObjectPoolFactory factory = new 
CompositeObjectPoolFactory(new CountingPoolableObjectFactory());
+
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestLender(final String name) {
+        super(name);
+    }
+
+    protected abstract Lender createLender() throws Exception;
+
+    public void testSetCompositeObjectPool() throws Exception {
+        final Lender lender = createLender();
+        try {
+            lender.setCompositeObjectPool(null);
+            fail("Expected an IllegalArgumentException when 
setCompositeObjectPool is passed null.");
+        } catch (IllegalArgumentException iae) {
+            // swallowed
+        }
+
+        
lender.setCompositeObjectPool((CompositeObjectPool)factory.createPool());
+        try {
+            
lender.setCompositeObjectPool((CompositeObjectPool)factory.createPool());
+            fail("Expected an IllegalStateException when 
setCompositeObjectPool is passed a pool twice.");
+        } catch (IllegalStateException ise) {
+            // swallowed
+        }
+    }
+
+    public void testBorrowAndRepay() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(lender);
+        final List list = cop.getPool();
+
+        cop.addObject();
+
+        try {
+            synchronized (list) {
+                final Object obj = lender.borrow();
+                lender.repay(obj);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testListIterator() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(lender);
+        cop.addObject();
+        final List list = cop.getPool();
+        final ListIterator li = lender.listIterator();
+
+        assertNotNull(li);
+
+        try {
+            synchronized (list) {
+                if (li.hasNext()) {
+                    li.next();
+                }
+                if (li.hasPrevious()) {
+                    li.previous();
+                }
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testSize() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(lender);
+        lender.size();
+    }
+
+    public void testToString() throws Exception {
+        createLender().toString();
+    }
+
+    protected final CompositeObjectPool createPool(final Lender lender) {
+        return createPool(new CountingPoolableObjectFactory(), lender);
+    }
+
+    protected final CompositeObjectPool createPool(final PoolableObjectFactory 
pof, final Lender lender) {
+        return new CompositeObjectPool(pof, new GrowManager(), lender, new 
SimpleTracker(), false, null);
+    }
+
+    protected final CompositeObjectPool createPool(final List list, final 
Lender lender) {
+        return new CompositeObjectPool(new CountingPoolableObjectFactory(), 
list,
+                new GrowManager(), lender, new SimpleTracker(), false, null);
+    }
+
+    protected static class CountingPoolableObjectFactory extends 
BasePoolableObjectFactory {
+        private int count = 0;
+        public Object makeObject() throws Exception {
+            return new Integer(count++);
+        }
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,125 @@
+/*
+ * 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 org.apache.commons.pool.PoolUtils;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Test that [EMAIL PROTECTED] LifoLender} is infact a LIFO.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestLifoLender extends TestLender {
+    private static final Integer ZERO = new Integer(0);
+    private static final Integer ONE = new Integer(1);
+
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestLifoLender(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestLifoLender.class);
+    }
+
+    protected Lender createLender() {
+        return new LifoLender();
+    }
+
+    public void testBorrowAndRepay() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(lender);
+        final List list = cop.getPool();
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testBorrowWithArrayList() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(new ArrayList(), lender);
+        final List list = cop.getPool();
+
+        assertTrue(list instanceof ArrayList);
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    public void testBorrowWithLinkedList() throws Exception {
+        final Lender lender = createLender();
+        final CompositeObjectPool cop = createPool(new LinkedList(), lender);
+        final List list = cop.getPool();
+
+        assertTrue(list instanceof LinkedList);
+
+        PoolUtils.prefill(cop, 2);
+
+        try {
+            synchronized (list) {
+                borrowAndRepay(lender);
+            }
+        } finally {
+            cop.close();
+        }
+    }
+
+    private static void borrowAndRepay(final Lender lender) {
+        Object obj = lender.borrow();
+        assertEquals(ONE, obj);
+        lender.repay(obj);
+
+        obj = lender.borrow();
+        assertEquals(ONE, obj);
+        lender.repay(obj);
+
+        obj = lender.borrow();
+        assertEquals(ONE, obj);
+        Object obj2 = lender.borrow();
+        assertEquals(ZERO, obj2);
+        lender.repay(obj);
+        lender.repay(obj2);
+
+        obj = lender.borrow();
+        assertEquals(ZERO, obj);
+        lender.repay(obj);
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestLifoLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
 Mon Mar 27 19:46:23 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] NullLender}.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestNullLender extends TestLender {
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestNullLender(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestNullLender.class);
+    }
+
+    protected Lender createLender() {
+        return new NullLender();
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestNullLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java?rev=389381&view=auto
==============================================================================
--- 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
 (added)
+++ 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
 Mon Mar 27 19:46:23 2006
@@ -0,0 +1,52 @@
+/*
+ * 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;
+
+/**
+ * Test behavior specific to [EMAIL PROTECTED] SoftLender}.
+ *
+ * @author Sandy McArthur
+ * @version $Revision$ $Date$
+ */
+public class TestSoftLender extends TestLender {
+    /**
+     * Constructs a test case with the given name.
+     */
+    public TestSoftLender(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestSoftLender.class);
+    }
+
+    protected Lender createLender() throws Exception {
+        return new SoftLender(new FifoLender());
+    }
+
+    public void testConstructor() {
+        try {
+            new SoftLender(null);
+            fail("Delegate in constructor must not be null.");
+        } catch (IllegalArgumentException iae) {
+            // expected
+        }
+    }
+}

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/composite/TestSoftLender.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to