You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2009/05/31 16:53:00 UTC

svn commit: r780449 - /commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java

Author: sebb
Date: Sun May 31 14:53:00 2009
New Revision: 780449

URL: http://svn.apache.org/viewvc?rev=780449&view=rev
Log:
Ensure assertion failures log sufficient information to debug test failures

Modified:
    commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java

Modified: commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java?rev=780449&r1=780448&r2=780449&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java (original)
+++ commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java Sun May 31 14:53:00 2009
@@ -25,6 +25,8 @@
 import org.apache.commons.pool.VisitTracker;
 import org.apache.commons.pool.VisitTrackerFactory;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.NoSuchElementException;
 import java.util.Random;
@@ -79,9 +81,9 @@
     }
 
     private GenericKeyedObjectPool pool = null;
-    private Integer zero = new Integer(0);
-    private Integer one = new Integer(1);
-    private Integer two = new Integer(2);
+    private final Integer zero = new Integer(0);
+    private final Integer one = new Integer(1);
+    private final Integer two = new Integer(2);
 
     public void setUp() throws Exception {
         super.setUp();
@@ -492,7 +494,7 @@
                 }
             }
             if(threads[i].failed()) {
-                fail();
+                fail("Thread failed: "+i+"\n"+getExceptionTrace(threads[i]._exception));
             }
         }
     }
@@ -895,9 +897,9 @@
         Random random = new Random();
         random.setSeed(System.currentTimeMillis());
         pool.setMaxIdle(-1);
-        for (int i = 0; i < 4; i++) {
+        for (int i = 0; i < smallPrimes.length; i++) {
             pool.setNumTestsPerEvictionRun(smallPrimes[i]);
-            for (int j = 0; j < 5; j++) {
+            for (int j = 0; j < 5; j++) { // TODO why 5?
                 pool.clear();
                 int zeroLength = 10 + random.nextInt(20);
                 for (int k = 0; k < zeroLength; k++) {
@@ -932,21 +934,21 @@
                 for (int k = 0; k < zeroLength; k++) {
                     tracker = (VisitTracker) pool.borrowObject(zero); 
                     visitCount = tracker.getValidateCount();                  
-                    assertTrue(visitCount >= cycleCount && 
-                            visitCount <= cycleCount + 1);
+                    assertTrue(formatSettings("i",i,"j",j,"k",k,"visitCount",visitCount,"cycleCount",cycleCount,"totalInstances",totalInstances,"Length",zeroLength),
+                            visitCount >= cycleCount && visitCount <= cycleCount + 1);
                 }
                 for (int k = 0; k < oneLength; k++) {
                     tracker = (VisitTracker) pool.borrowObject(one); 
                     visitCount = tracker.getValidateCount();
-                    assertTrue(visitCount >= cycleCount && 
-                            visitCount <= cycleCount + 1);
+                    assertTrue(formatSettings("i",i,"j",j,"k",k,"visitCount",visitCount,"cycleCount",cycleCount,"totalInstances",totalInstances,"Length",oneLength),
+                            visitCount >= cycleCount && visitCount <= cycleCount + 1);
                 }
                 for (int k = 0; k < twoLength; k++) {
                     tracker = (VisitTracker) pool.borrowObject(two); 
                     visitCount = tracker.getValidateCount();
-                    assertTrue(visitCount >= cycleCount && 
-                            visitCount <= cycleCount + 1);
-                } 
+                    assertTrue(formatSettings("i",i,"j",j,"k",k,"visitCount",visitCount,"cycleCount",cycleCount,"totalInstances",totalInstances,"Length",twoLength),
+                            visitCount >= cycleCount && visitCount <= cycleCount + 1);
+                }
             }
         }
     }
@@ -1283,7 +1285,7 @@
         // Validation will now fail on activation when borrowObject returns
         // an idle instance, and then when attempting to create a new instance
         try {
-            obj1 = pool.borrowObject("one");
+            pool.borrowObject("one");
             fail("Expecting NoSuchElementException");
         } catch (NoSuchElementException ex) {
             // expected
@@ -1299,6 +1301,7 @@
         private KeyedObjectPool _pool = null;
         private volatile boolean _complete = false;
         private volatile boolean _failed = false;
+        private volatile Exception _exception;
         private int _iter = 100;
         private int _delay = 50;
 
@@ -1337,6 +1340,7 @@
                 try {
                     obj = _pool.borrowObject(key);
                 } catch(Exception e) {
+                    _exception = e;
                     e.printStackTrace();
                     _failed = true;
                     _complete = true;
@@ -1351,6 +1355,7 @@
                 try {
                     _pool.returnObject(key,obj);
                 } catch(Exception e) {
+                    _exception = e;
                     e.printStackTrace();
                     _failed = true;
                     _complete = true;
@@ -1467,6 +1472,25 @@
         return false;
     }
 
+    private String getExceptionTrace(Throwable t){
+        StringWriter sw = new StringWriter();
+        t.printStackTrace(new PrintWriter(sw));
+        return sw.toString();
+    }
+    
+    private String formatSettings(String s1, int i1, String s2, int i2, String s3, int i3,
+            String s4, int i4, String s5, int i5, String s6, int i6, String s7, int i7){
+        StringBuffer sb = new StringBuffer();
+        sb.append(s1).append(' ').append(i1).append(' ');
+        sb.append(s2).append(' ').append(i2).append(' ');
+        sb.append(s3).append(' ').append(i3).append(' ');
+        sb.append(s4).append(' ').append(i4).append(' ');
+        sb.append(s5).append(' ').append(i5).append(' ');
+        sb.append(s6).append(' ').append(i6).append(' ');
+        sb.append(s7).append(' ').append(i7).append(' ');
+        return sb.toString();
+    }
+    
 }
 
 



Re: svn commit: r780449 - /commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java

Posted by Phil Steitz <ph...@gmail.com>.
sebb wrote:
> On 31/05/2009, Phil Steitz <ph...@gmail.com> wrote:
>   
>> sebb@apache.org wrote:
>>
>>  Thanks!
>>
>>     
>>>  -        for (int i = 0; i < 4; i++) {
>>> +        for (int i = 0; i < smallPrimes.length; i++) {
>>>
>>>       
>> pool.setNumTestsPerEvictionRun(smallPrimes[i]);
>>     
>>> -            for (int j = 0; j < 5; j++) {
>>> +            for (int j = 0; j < 5; j++) { // TODO why 5?
>>>
>>>
>>>       
>>  No particular reason to choose 5 here - that is just the number of random
>> pool-generation-then-visiting iterations to perform.  Could make this a
>> constant, but it is only used here.
>>     
>
> OK. I just wondered if it was related to 4==smallPrimes.length.
>
> Perhaps it might be worth making it the outer loop?
> Could then make it a variable, e.g. derived from a property, with
> default value 5.
> This could make the current debugging a bit easier, as we could use a
> larger number.
>   
+1
Phil
>   
>>  Phil
>>
>>     
>>>       
>> ---------------------------------------------------------------------
>>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>  For additional commands, e-mail: dev-help@commons.apache.org
>>
>>
>>     
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>   


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r780449 - /commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java

Posted by sebb <se...@gmail.com>.
On 31/05/2009, Phil Steitz <ph...@gmail.com> wrote:
> sebb@apache.org wrote:
>
>  Thanks!
>
> >  -        for (int i = 0; i < 4; i++) {
> > +        for (int i = 0; i < smallPrimes.length; i++) {
> >
> pool.setNumTestsPerEvictionRun(smallPrimes[i]);
> > -            for (int j = 0; j < 5; j++) {
> > +            for (int j = 0; j < 5; j++) { // TODO why 5?
> >
> >
>  No particular reason to choose 5 here - that is just the number of random
> pool-generation-then-visiting iterations to perform.  Could make this a
> constant, but it is only used here.

OK. I just wondered if it was related to 4==smallPrimes.length.

Perhaps it might be worth making it the outer loop?
Could then make it a variable, e.g. derived from a property, with
default value 5.
This could make the current debugging a bit easier, as we could use a
larger number.

>  Phil
>
> >
> >
>
>
> ---------------------------------------------------------------------
>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  For additional commands, e-mail: dev-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r780449 - /commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericKeyedObjectPool.java

Posted by Phil Steitz <ph...@gmail.com>.
sebb@apache.org wrote:

Thanks!
>  
> -        for (int i = 0; i < 4; i++) {
> +        for (int i = 0; i < smallPrimes.length; i++) {
>              pool.setNumTestsPerEvictionRun(smallPrimes[i]);
> -            for (int j = 0; j < 5; j++) {
> +            for (int j = 0; j < 5; j++) { // TODO why 5?
>   
No particular reason to choose 5 here - that is just the number of 
random pool-generation-then-visiting iterations to perform.  Could make 
this a constant, but it is only used here.

Phil
>                  
 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org