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();
+    }
+    
 }
 
 


Reply via email to