You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ha...@apache.org on 2014/12/16 00:21:55 UTC

[10/17] activemq git commit: https://issues.apache.org/jira/browse/AMQ-5016

https://issues.apache.org/jira/browse/AMQ-5016

Added test and a fix.


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/ee9b3ef7
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/ee9b3ef7
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/ee9b3ef7

Branch: refs/heads/activemq-5.10.x
Commit: ee9b3ef72ba8f029183dd8151b4ecbef528fd28b
Parents: 100afb0
Author: Timothy Bish <ta...@gmail.com>
Authored: Wed Jun 11 14:20:00 2014 -0400
Committer: Hadrian Zbarcea <ha...@apache.org>
Committed: Mon Dec 15 16:50:52 2014 -0500

----------------------------------------------------------------------
 .../org/apache/activemq/util/BitArrayBin.java   |  28 ++--
 .../apache/activemq/util/BitArrayBinTest.java   | 134 ++++++++++---------
 2 files changed, 88 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/ee9b3ef7/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java b/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java
index 592873b..528144e 100755
--- a/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java
+++ b/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java
@@ -21,21 +21,21 @@ import java.util.LinkedList;
 
 /**
  * Holder for many bitArrays - used for message audit
- * 
- * 
+ *
+ *
  */
 public class BitArrayBin implements Serializable {
 
     private static final long serialVersionUID = 1L;
-    private LinkedList<BitArray> list;
+    private final LinkedList<BitArray> list;
     private int maxNumberOfArrays;
-    private int firstIndex = -1;
+    private long firstIndex = -1;
     private long lastInOrderBit=-1;
 
     /**
      * Create a BitArrayBin to a certain window size (number of messages to
      * keep)
-     * 
+     *
      * @param windowSize
      */
     public BitArrayBin(int windowSize) {
@@ -49,7 +49,7 @@ public class BitArrayBin implements Serializable {
 
     /**
      * Set a bit
-     * 
+     *
      * @param index
      * @param value
      * @return true if set
@@ -65,7 +65,7 @@ public class BitArrayBin implements Serializable {
         }
         return answer;
     }
-    
+
     /**
      * Test if in order
      * @param index
@@ -85,7 +85,7 @@ public class BitArrayBin implements Serializable {
 
     /**
      * Get the boolean value at the index
-     * 
+     *
      * @param index
      * @return true/false
      */
@@ -107,7 +107,7 @@ public class BitArrayBin implements Serializable {
 
     /**
      * Get the BitArray for the index
-     * 
+     *
      * @param index
      * @return BitArray
      */
@@ -123,7 +123,7 @@ public class BitArrayBin implements Serializable {
                     list.add(new BitArray());
                     overShoot--;
                 }
-                
+
                 bin = maxNumberOfArrays - 1;
             }
             answer = list.get(bin);
@@ -137,7 +137,7 @@ public class BitArrayBin implements Serializable {
 
     /**
      * Get the index of the bin from the total index
-     * 
+     *
      * @param index
      * @return the index of the bin
      */
@@ -153,7 +153,7 @@ public class BitArrayBin implements Serializable {
 
     /**
      * Get the offset into a bin from the total index
-     * 
+     *
      * @param index
      * @return the relative offset into a bin
      */
@@ -167,9 +167,9 @@ public class BitArrayBin implements Serializable {
 
     public long getLastSetIndex() {
         long result = -1;
-        
+
         if (firstIndex >=0) {
-            result = firstIndex;   
+            result = firstIndex;
             BitArray last = null;
             for (int lastBitArrayIndex = maxNumberOfArrays -1; lastBitArrayIndex >= 0; lastBitArrayIndex--) {
                 last = list.get(lastBitArrayIndex);

http://git-wip-us.apache.org/repos/asf/activemq/blob/ee9b3ef7/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java b/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
index e1276d8..2b17d8f 100644
--- a/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
+++ b/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java
@@ -16,16 +16,21 @@
  */
 package org.apache.activemq.util;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
-public class BitArrayBinTest extends TestCase {
-        
+import org.junit.Test;
+
+public class BitArrayBinTest {
+
+    @Test
     public void testSetAroundWindow() throws Exception {
         doTestSetAroundWindow(500, 2000);
         doTestSetAroundWindow(512, 2000);
         doTestSetAroundWindow(128, 512);
     }
 
+    @Test
     public void testSetHiLo() throws Exception {
         BitArrayBin toTest = new BitArrayBin(50);
         toTest.setBit(0, true);
@@ -34,127 +39,136 @@ public class BitArrayBinTest extends TestCase {
         assertTrue("set", toTest.getBit(0));
 
         toTest.setBit(0, true);
-        assertTrue("set", toTest.getBit(0));        
+        assertTrue("set", toTest.getBit(0));
     }
-    
+
     private void doTestSetAroundWindow(int window, int dataSize) throws Exception {
 
         BitArrayBin toTest = new BitArrayBin(window);
-        
-        for (int i=0; i <= dataSize; i++) {
+
+        for (int i = 0; i <= dataSize; i++) {
             assertTrue("not already set", !toTest.setBit(i, Boolean.TRUE));
             assertEquals("current is max", i, toTest.getLastSetIndex());
         }
 
         assertEquals("last is max", dataSize, toTest.getLastSetIndex());
-        
+
         int windowOfValidData = roundWindow(dataSize, window);
-        int i=dataSize;
-        for (; i >= dataSize -windowOfValidData; i--) {
+        int i = dataSize;
+        for (; i >= dataSize - windowOfValidData; i--) {
             assertTrue("was already set, id=" + i, toTest.setBit(i, Boolean.TRUE));
         }
 
         assertEquals("last is still max", dataSize, toTest.getLastSetIndex());
-        
+
         for (; i >= 0; i--) {
             assertTrue("was not already set, id=" + i, !toTest.setBit(i, Boolean.TRUE));
         }
-        
-        for (int j= dataSize +1; j<=(2*dataSize); j++) {
+
+        for (int j = dataSize + 1; j <= (2 * dataSize); j++) {
             assertTrue("not already set: id=" + j, !toTest.setBit(j, Boolean.TRUE));
         }
-        
-        assertEquals("last still max*2", 2*dataSize, toTest.getLastSetIndex());
 
+        assertEquals("last still max*2", 2 * dataSize, toTest.getLastSetIndex());
     }
-    
+
+    @Test
     public void testSetUnsetAroundWindow() throws Exception {
         doTestSetUnSetAroundWindow(500, 2000);
         doTestSetUnSetAroundWindow(512, 2000);
         doTestSetUnSetAroundWindow(128, 512);
     }
-    
+
     private void doTestSetUnSetAroundWindow(int dataSize, int window) throws Exception {
 
         BitArrayBin toTest = new BitArrayBin(window);
-        
-        for (int i=0; i <=dataSize; i++) {
+
+        for (int i = 0; i <= dataSize; i++) {
             assertTrue("not already set", !toTest.setBit(i, Boolean.TRUE));
         }
-                
+
         int windowOfValidData = roundWindow(dataSize, window);
-        for (int i=dataSize; i >= 0 && i >=dataSize -windowOfValidData; i--) {
+        for (int i = dataSize; i >= 0 && i >= dataSize - windowOfValidData; i--) {
             assertTrue("was already set, id=" + i, toTest.setBit(i, Boolean.FALSE));
         }
 
-        for (int i=0; i <=dataSize; i++) {
+        for (int i = 0; i <= dataSize; i++) {
             assertTrue("not already set, id:" + i, !toTest.setBit(i, Boolean.TRUE));
         }
 
-        for (int j= 2*dataSize; j< 4*dataSize; j++) {
+        for (int j = 2 * dataSize; j < 4 * dataSize; j++) {
             assertTrue("not already set: id=" + j, !toTest.setBit(j, Boolean.TRUE));
         }
     }
-    
+
+    @Test
     public void testSetAroundLongSizeMultiplier() throws Exception {
         int window = 512;
         int dataSize = 1000;
-        for (int muliplier=1; muliplier <8; muliplier++) {
-            for (int value=0; value <dataSize; value++) {
+        for (int muliplier = 1; muliplier < 8; muliplier++) {
+            for (int value = 0; value < dataSize; value++) {
                 BitArrayBin toTest = new BitArrayBin(window);
-                
-                int instance = value +muliplier*BitArray.LONG_SIZE;
+
+                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));
                 assertEquals("max set correct", instance, toTest.getLastSetIndex());
             }
         }
     }
-    
-    public void testLargeGapInData(int window) throws Exception {
+
+    @Test
+    public void testLargeGapInData() throws Exception {
         doTestLargeGapInData(128);
         doTestLargeGapInData(500);
     }
-    
+
     public void doTestLargeGapInData(int window) throws Exception {
         BitArrayBin toTest = new BitArrayBin(window);
-        
+
         int instance = BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  !toTest.setBit(instance, Boolean.TRUE));
-        
-        instance = 12 *BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  !toTest.setBit(instance, Boolean.TRUE));
-        
-        instance = 9 *BitArray.LONG_SIZE;
-        assertTrue("not already set: id=" + instance,  !toTest.setBit(instance, Boolean.TRUE));
+        assertTrue("not already set: id=" + instance, !toTest.setBit(instance, Boolean.TRUE));
+
+        instance = 12 * BitArray.LONG_SIZE;
+        assertTrue("not already set: id=" + instance, !toTest.setBit(instance, Boolean.TRUE));
+
+        instance = 9 * BitArray.LONG_SIZE;
+        assertTrue("not already set: id=" + instance, !toTest.setBit(instance, Boolean.TRUE));
+    }
+
+    @Test
+    public void testLastSeq() throws Exception {
+        BitArrayBin toTest = new BitArrayBin(512);
+        assertEquals("last not set", -1, toTest.getLastSetIndex());
+
+        toTest.setBit(1, Boolean.TRUE);
+        assertEquals("last correct", 1, toTest.getLastSetIndex());
+
+        toTest.setBit(64, Boolean.TRUE);
+        assertEquals("last correct", 64, toTest.getLastSetIndex());
+
+        toTest.setBit(68, Boolean.TRUE);
+        assertEquals("last correct", 68, toTest.getLastSetIndex());
     }
-    
-    
-   public void testLastSeq() throws Exception {
-       BitArrayBin toTest = new BitArrayBin(512);
-       assertEquals("last not set", -1, toTest.getLastSetIndex());
-       
-       toTest.setBit(1, Boolean.TRUE);
-       assertEquals("last correct", 1, toTest.getLastSetIndex());
-       
-       toTest.setBit(64, Boolean.TRUE);
-       assertEquals("last correct", 64, toTest.getLastSetIndex());
-       
-       toTest.setBit(68, Boolean.TRUE);
-       assertEquals("last correct", 68, toTest.getLastSetIndex());
-       
-   }
-    
+
     // window moves in increments of BitArray.LONG_SIZE.
     // valid data window on low end can be larger than window
     private int roundWindow(int dataSetEnd, int windowSize) {
-        
+
         int validData = dataSetEnd - windowSize;
         int validDataBin = validData / BitArray.LONG_SIZE;
-        validDataBin += (windowSize % BitArray.LONG_SIZE > 0? 1:0);
+        validDataBin += (windowSize % BitArray.LONG_SIZE > 0 ? 1 : 0);
         int startOfValid = validDataBin * BitArray.LONG_SIZE;
-        
-        return dataSetEnd - startOfValid;        
+
+        return dataSetEnd - startOfValid;
     }
 
+    @Test
+    public void testLargeNumber() throws Exception {
+        BitArrayBin toTest = new BitArrayBin(1024);
+        toTest.setBit(1, true);
+        long largeNum = Integer.MAX_VALUE * 2L + 100L;
+        toTest.setBit(largeNum, true);
+        assertTrue("set", toTest.getBit(largeNum));
+    }
 }