Author: chirino
Date: Tue Jun 30 17:36:25 2009
New Revision: 789841

URL: http://svn.apache.org/viewvc?rev=789841&view=rev
Log:
- fixing some failures
- Starting to experiment with TestNG


Added:
    
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/apollo/Combinator.java
Modified:
    activemq/sandbox/activemq-flow/activemq-util/pom.xml
    
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/IOHelper.java
    
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayInputStream.java
    
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayOutputStream.java
    
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
    activemq/sandbox/activemq-flow/pom.xml

Modified: activemq/sandbox/activemq-flow/activemq-util/pom.xml
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/pom.xml?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- activemq/sandbox/activemq-flow/activemq-util/pom.xml (original)
+++ activemq/sandbox/activemq-flow/activemq-util/pom.xml Tue Jun 30 17:36:25 
2009
@@ -66,7 +66,14 @@
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
-    
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <version>5.8</version>
+      <scope>test</scope>
+      <classifier>jdk15</classifier>
+    </dependency>
+        
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>

Modified: 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/IOHelper.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/IOHelper.java?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/IOHelper.java
 (original)
+++ 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/IOHelper.java
 Tue Jun 30 17:36:25 2009
@@ -221,8 +221,7 @@
                                                }
                                        }
                                };
-                       } catch (Exception ignore) {
-                               ignore.printStackTrace();
+                       } catch (Throwable ignore) {
                                // Perhaps we should issue a warning here so 
folks know that 
                                // the disk syncs are not going to be of very 
good quality.
                        }

Modified: 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayInputStream.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayInputStream.java?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayInputStream.java
 (original)
+++ 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayInputStream.java
 Tue Jun 30 17:36:25 2009
@@ -294,7 +294,7 @@
             case 12:
             case 13:
                 pos += 2;
-                if (pos > length) {
+                if (pos > total) {
                     throw new UTFDataFormatException("bad string");
                 }
                 c2 = (int)buf[pos - 1];
@@ -305,7 +305,7 @@
                 break;
             case 14:
                 pos += 3;
-                if (pos > length) {
+                if (pos > total) {
                     throw new UTFDataFormatException("bad string");
                 }
                 c2 = (int)buf[pos - 2];

Modified: 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayOutputStream.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayOutputStream.java?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayOutputStream.java
 (original)
+++ 
activemq/sandbox/activemq-flow/activemq-util/src/main/java/org/apache/activemq/util/buffer/DataByteArrayOutputStream.java
 Tue Jun 30 17:36:25 2009
@@ -257,7 +257,7 @@
         }
         onWrite();
     }
-
+    
     private void ensureEnoughBuffer(int newcount) {
         if (newcount > buf.length) {
             byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];

Added: 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/apollo/Combinator.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/apollo/Combinator.java?rev=789841&view=auto
==============================================================================
--- 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/apollo/Combinator.java
 (added)
+++ 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/apollo/Combinator.java
 Tue Jun 30 17:36:25 2009
@@ -0,0 +1,160 @@
+package org.apache.activemq.apollo;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Combinator objects are used to compute all the possible combinations given 
a set of combination options.
+ * This class is generally use in conjunction with TestNG test cases generate 
the @Factory and @DataProvider 
+ * results.
+ * 
+ * @author chirino
+ */
+public class Combinator {
+
+       private LinkedHashMap<String, ComboOption> comboOptions = new 
LinkedHashMap<String, ComboOption>();
+       private int annonymousAttributeCounter;
+
+       static class ComboOption {
+               final String attribute;
+               final LinkedHashSet<Object> values = new 
LinkedHashSet<Object>();
+
+               public ComboOption(String attribute, Collection<Object> 
options) {
+                       this.attribute = attribute;
+                       this.values.addAll(options);
+               }
+       }
+
+       public void put(String attribute, Object... options) {
+               ComboOption co = this.comboOptions.get(attribute);
+               if (co == null) {
+                       this.comboOptions.put(attribute, new 
ComboOption(attribute, Arrays.asList(options)));
+               } else {
+                       co.values.addAll(Arrays.asList(options));
+               }
+       }
+       
+       public void add(Object... options) {
+               put(""+(annonymousAttributeCounter++), options);
+       }
+       
+//     @SuppressWarnings("unchecked")
+//     public void addFromContext(ApplicationContext applicationContext, 
String name) {
+//             List<Object> list = (List)applicationContext.getBean(name);
+//             Object[] options = list.toArray();
+//             add(options);
+//     }
+//     
+//     public void addAllFromContext(ApplicationContext applicationContext, 
String name) {
+//             List<List<Object>> list = 
(List)applicationContext.getBean(name);
+//             for (List<Object> l : list) {
+//                     Object[] options = l.toArray();
+//                     add(options);
+//             }
+//     }
+
+
+       public List<Map<String, Object>> combinations() {
+               List<Map<String, Object>> expandedOptions = new 
ArrayList<Map<String, Object>>();
+               expandCombinations(new 
ArrayList<ComboOption>(comboOptions.values()), expandedOptions);
+               return expandedOptions;
+
+       }
+
+       private void expandCombinations(List<ComboOption> optionsLeft, 
List<Map<String, Object>> expandedCombos) {
+               if (!optionsLeft.isEmpty()) {
+                       Map<String, Object> map;
+                       if (comboOptions.size() == optionsLeft.size()) {
+                               map = new LinkedHashMap<String, Object>();
+                               expandedCombos.add(map);
+                       } else {
+                               map = expandedCombos.get(expandedCombos.size() 
- 1);
+                       }
+
+                       LinkedList<ComboOption> l = new 
LinkedList<ComboOption>(optionsLeft);
+                       ComboOption comboOption = l.removeFirst();
+                       int i = 0;
+                       for (Iterator<Object> iter = 
comboOption.values.iterator(); iter.hasNext();) {
+                               Object value = iter.next();
+                               if (i != 0) {
+                                       map = new LinkedHashMap<String, 
Object>(map);
+                                       expandedCombos.add(map);
+                               }
+                               map.put(comboOption.attribute, value);
+                               expandCombinations(l, expandedCombos);
+                               i++;
+                       }
+               }
+       }
+
+       /**
+        * Creates a bean for each combination of the type specified by clazz 
arguement and uses setter/field 
+        * injection to initialize the Bean with the combination values.
+        * 
+        * @param <T>
+        * @param clazz
+        * @return
+        * @throws InstantiationException
+        * @throws IllegalAccessException
+        */
+       public <T> Object[] combinationsAsBeans(Class<T> clazz) throws 
Exception {
+               List<Map<String, Object>> combinations = combinations();
+               List<T> rc = new ArrayList<T>(combinations.size());
+               for (Map<String, Object> combination : combinations) {
+                       T instance = clazz.newInstance();
+                       
+                       for (Entry<String, Object> entry : 
combination.entrySet()) {
+                               String key = entry.getKey();
+                               Object value = entry.getValue();
+                               try {
+                                       // Try setter injection..
+                                       Method method = 
clazz.getMethod("set"+ucfc(key), value.getClass());
+                                       method.invoke(instance, new 
Object[]{value});
+                               } catch (Exception ignore) {
+                                       // Try property injection..
+                                       Field declaredField = 
clazz.getDeclaredField(key);
+                                       declaredField.set(instance, value);
+                               }
+                       }
+                       
+                       rc.add(instance);
+               }
+               Object[] t = new Object[rc.size()];
+               rc.toArray(t);
+               return t;
+       }
+
+       /**
+        * Upper case the first character.
+        * @param key
+        * @return
+        */
+       static private String ucfc(String key) {
+               return key.substring(0,1).toUpperCase()+key.substring(1);
+       }
+
+       public Object[][] combinationsAsParameterArgs() {
+               List<Map<String, Object>> combinations = combinations();
+               Object[][] rc = new Object[combinations.size()][];
+               int i=0;
+               for (Map<String, Object> combination : combinations) {
+                       int j=0;
+                       Object[] arg = new Object[combination.size()];
+                       for (Object object : combination.values()) {
+                               arg[j++] = object;
+                       }
+                       rc[i++] = arg;
+               }
+               return rc;
+       }
+
+}

Modified: 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/util/BitArrayBinTest.java?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
 (original)
+++ 
activemq/sandbox/activemq-flow/activemq-util/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
 Tue Jun 30 17:36:25 2009
@@ -1,10 +1,12 @@
 package org.apache.activemq.util;
 
-import junit.framework.TestCase;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
-public class BitArrayBinTest extends TestCase {
+public class BitArrayBinTest {
         
-    public void testSetAroundWindow() throws Exception {
+    @Test()
+       public void testSetAroundWindow() throws Exception {
         doTestSetAroundWindow(500, 2000);
         doTestSetAroundWindow(512, 2000);
         doTestSetAroundWindow(128, 512);
@@ -15,25 +17,26 @@
         BitArrayBin toTest = new BitArrayBin(window);
         
         for (int i=0; i <= dataSize; i++) {
-            assertTrue("not already set", !toTest.setBit(i, Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(i, Boolean.TRUE)), "not already 
set");
         }
 
         int windowOfValidData = roundWindow(dataSize, window);
         int i=dataSize;
         for (; i >= dataSize -windowOfValidData; i--) {
-            assertTrue("was already set, id=" + i, toTest.setBit(i, 
Boolean.TRUE));
+            Assert.assertTrue(toTest.setBit(i, Boolean.TRUE), ("was already 
set, id=" + i));
         }
         
         for (; i >= 0; i--) {
-            assertTrue("was not already set, id=" + i, !toTest.setBit(i, 
Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(i, Boolean.TRUE)), ("was not 
already set, id=" + i));
         }
         
         for (int j= dataSize +1; j<(2*dataSize); j++) {
-            assertTrue("not already set: id=" + j, !toTest.setBit(j, 
Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(j, Boolean.TRUE)), ("not already 
set: id=" + j));
         }
     }
     
-    public void testSetUnsetAroundWindow() throws Exception {
+    @Test()
+       public void testSetUnsetAroundWindow() throws Exception {
         doTestSetUnSetAroundWindow(500, 2000);
         doTestSetUnSetAroundWindow(512, 2000);
         doTestSetUnSetAroundWindow(128, 512);
@@ -44,24 +47,25 @@
         BitArrayBin toTest = new BitArrayBin(window);
         
         for (int i=0; i <=dataSize; i++) {
-            assertTrue("not already set", !toTest.setBit(i, Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(i, Boolean.TRUE)), "not already 
set");
         }
                 
         int windowOfValidData = roundWindow(dataSize, window);
         for (int i=dataSize; i >= 0 && i >=dataSize -windowOfValidData; i--) {
-            assertTrue("was already set, id=" + i, toTest.setBit(i, 
Boolean.FALSE));
+            Assert.assertTrue(toTest.setBit(i, Boolean.FALSE), ("was already 
set, id=" + i));
         }
 
         for (int i=0; i <=dataSize; i++) {
-            assertTrue("not already set, id:" + i, !toTest.setBit(i, 
Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(i, Boolean.TRUE)), ("not already 
set, id:" + i));
         }
 
         for (int j= 2*dataSize; j< 4*dataSize; j++) {
-            assertTrue("not already set: id=" + j, !toTest.setBit(j, 
Boolean.TRUE));
+            Assert.assertTrue((!toTest.setBit(j, Boolean.TRUE)), ("not already 
set: id=" + j));
         }
     }
     
-    public void testSetAroundLongSizeMultiplier() throws Exception {
+    @Test()
+       public void testSetAroundLongSizeMultiplier() throws Exception {
         int window = 512;
         int dataSize = 1000;
         for (int muliplier=1; muliplier <8; muliplier++) {
@@ -69,13 +73,14 @@
                 BitArrayBin toTest = new BitArrayBin(window);
                 
                 int instance = value +muliplier*BitArray.LONG_SIZE;
-                assertTrue("not already set: id=" + instance, 
!toTest.setBit(instance, Boolean.TRUE));
-                assertTrue("not already set: id=" + value, 
!toTest.setBit(value, Boolean.TRUE));
+                Assert.assertTrue((!toTest.setBit(instance, Boolean.TRUE)), 
("not already set: id=" + instance));
+                Assert.assertTrue((!toTest.setBit(value, Boolean.TRUE)), ("not 
already set: id=" + value));
             }
         }
     }
     
-    public void testLargeGapInData(int window) throws Exception {
+    @Test()
+       public void testLargeGapInData() throws Exception {
         doTestLargeGapInData(128);
         doTestLargeGapInData(500);
     }
@@ -84,13 +89,13 @@
         BitArrayBin toTest = new BitArrayBin(window);
         
         int instance = BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  
!toTest.setBit(instance, Boolean.TRUE));
+        Assert.assertTrue((!toTest.setBit(instance, Boolean.TRUE)), ("not 
already set: id=" + instance));
         
         instance = 12 *BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  
!toTest.setBit(instance, Boolean.TRUE));
+        Assert.assertTrue((!toTest.setBit(instance, Boolean.TRUE)), ("not 
already set: id=" + instance));
         
         instance = 9 *BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  
!toTest.setBit(instance, Boolean.TRUE));
+        Assert.assertTrue((!toTest.setBit(instance, Boolean.TRUE)), ("not 
already set: id=" + instance));
     }
     
     // window moves in increments of BitArray.LONG_SIZE.

Modified: activemq/sandbox/activemq-flow/pom.xml
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/pom.xml?rev=789841&r1=789840&r2=789841&view=diff
==============================================================================
--- activemq/sandbox/activemq-flow/pom.xml (original)
+++ activemq/sandbox/activemq-flow/pom.xml Tue Jun 30 17:36:25 2009
@@ -65,6 +65,7 @@
     <jetty-version>6.1.9</jetty-version>
     <jmock-version>1.0.1</jmock-version>
     <junit-version>4.4</junit-version>
+    <testng-version>5.8</testng-version>
     <jxta-version>2.0</jxta-version>
     <log4j-version>1.2.14</log4j-version>
     <nlog4j-version>1.5.2</nlog4j-version>
@@ -705,6 +706,14 @@
         <scope>test</scope>
       </dependency>
       <dependency>
+        <groupId>org.testng</groupId>
+        <artifactId>testng</artifactId>
+        <version>${testng-version}</version>
+        <scope>test</scope>
+        <classifier>jdk15</classifier>
+      </dependency>
+
+      <dependency>
         <groupId>jmock</groupId>
         <artifactId>jmock</artifactId>
         <version>${jmock-version}</version>
@@ -887,8 +896,11 @@
               <exclude>**/perf/**</exclude>
               <exclude>**/jaxb/**</exclude>
             </excludes>
+            <parallel>methods</parallel>
+            <threadCount>16</threadCount>
           </configuration>
         </plugin>
+        
         <plugin>
           <groupId>org.apache.felix</groupId>
           <artifactId>maven-bundle-plugin</artifactId>


Reply via email to