You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/02/18 16:48:42 UTC

svn commit: r1072028 - in /cassandra/branches/cassandra-0.7: src/java/org/apache/cassandra/utils/ByteBufferUtil.java test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java

Author: jbellis
Date: Fri Feb 18 15:48:41 2011
New Revision: 1072028

URL: http://svn.apache.org/viewvc?rev=1072028&view=rev
Log:
add ByteBufferUtilTest

Added:
    cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java
Modified:
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
    cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java?rev=1072028&r1=1072027&r2=1072028&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java Fri Feb 18 15:48:41 2011
@@ -157,9 +157,9 @@ public class ByteBufferUtil
      *
      * @param buffer the array to traverse for looking for the object, may be <code>null</code>
      * @param valueToFind the value to find
-     * @param startIndex the start index to travers backwards from
-     * @return the last index of the value within the array, relative to buffer's arrayOffset
-     * [that is, between buffer.position() and buffer.limit()]; <code>-1</code> if not found.
+     * @param startIndex the start index (i.e. BB position) to travers backwards from
+     * @return the last index (i.e. BB position) of the value within the array
+     * [between buffer.position() and buffer.limit()]; <code>-1</code> if not found.
      */
     public static int lastIndexOf(ByteBuffer buffer, byte valueToFind, int startIndex)
     {

Added: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java?rev=1072028&view=auto
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java (added)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/ByteBufferUtilTest.java Fri Feb 18 15:48:41 2011
@@ -0,0 +1,237 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.cassandra.utils;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.util.Arrays;
+
+import com.google.common.base.Charsets;
+import org.junit.Test;
+
+public class ByteBufferUtilTest
+{
+    private static final String s = "cassandra";
+
+    private ByteBuffer fromStringWithPosition(String s, int pos, boolean direct)
+    {
+        int l = s.length();
+        ByteBuffer bb;
+        if (direct)
+        {
+            bb = ByteBuffer.allocateDirect(l + pos);
+        }
+        else
+        {
+            ByteBuffer tmp = ByteBuffer.allocate(l + pos + 3);
+            tmp.position(3);
+            bb = tmp.slice(); // make bb have a non null arrayOffset
+        }
+        bb.position(pos);
+        bb.mark();
+        bb.put(s.getBytes());
+        bb.reset();
+        assert bb.position() == pos;
+        return bb;
+    }
+
+    @Test
+    public void testString() throws Exception
+    {
+        assert s.equals(ByteBufferUtil.string(ByteBufferUtil.bytes(s)));
+
+        int pos = 10;
+        ByteBuffer bb = fromStringWithPosition(s, 10, false);
+        assert s.equals(ByteBufferUtil.string(bb, 10, s.length()));
+
+        bb = fromStringWithPosition(s, 10, true);
+        assert s.equals(ByteBufferUtil.string(bb, 10, s.length()));
+    }
+
+    @Test
+    public void testGetArray()
+    {
+        byte[] t = s.getBytes();
+
+        ByteBuffer bb = ByteBufferUtil.bytes(s);
+        assertArrayEquals(t, ByteBufferUtil.getArray(bb));
+
+        bb = fromStringWithPosition(s, 10, false);
+        assertArrayEquals(t, ByteBufferUtil.getArray(bb));
+
+        bb = fromStringWithPosition(s, 10, true);
+        assertArrayEquals(t, ByteBufferUtil.getArray(bb));
+    }
+
+    @Test
+    public void testLastIndexOf()
+    {
+        ByteBuffer bb = ByteBufferUtil.bytes(s);
+        checkLastIndexOf(bb);
+
+        bb = fromStringWithPosition(s, 10, false);
+        checkLastIndexOf(bb);
+
+        bb = fromStringWithPosition(s, 10, true);
+        checkLastIndexOf(bb);
+    }
+
+    private void checkLastIndexOf(ByteBuffer bb)
+    {
+        assert bb.position() + 8 == ByteBufferUtil.lastIndexOf(bb, (byte)'a', bb.position() + 8);
+        assert bb.position() + 4 == ByteBufferUtil.lastIndexOf(bb, (byte)'a', bb.position() + 7);
+        assert bb.position() + 3 == ByteBufferUtil.lastIndexOf(bb, (byte)'s', bb.position() + 8);
+        assert -1 == ByteBufferUtil.lastIndexOf(bb, (byte)'o', bb.position() + 8);
+        assert -1 == ByteBufferUtil.lastIndexOf(bb, (byte)'d', bb.position() + 5);
+    }
+
+    @Test
+    public void testClone()
+    {
+        ByteBuffer bb = ByteBufferUtil.bytes(s);
+        ByteBuffer clone1 = ByteBufferUtil.clone(bb);
+        assert bb != clone1;
+        assert bb.equals(clone1);
+        assert bb.array() != clone1.array();
+
+        bb = fromStringWithPosition(s, 10, false);
+        ByteBuffer clone2 = ByteBufferUtil.clone(bb);
+        assert bb != clone2;
+        assert bb.equals(clone2);
+        assert clone1.equals(clone2);
+        assert bb.array() != clone2.array();
+
+        bb = fromStringWithPosition(s, 10, true);
+        ByteBuffer clone3 = ByteBufferUtil.clone(bb);
+        assert bb != clone3;
+        assert bb.equals(clone3);
+        assert clone1.equals(clone3);
+    }
+
+    @Test
+    public void testArrayCopy()
+    {
+        ByteBuffer bb = ByteBufferUtil.bytes(s);
+        checkArrayCopy(bb);
+
+        bb = fromStringWithPosition(s, 10, false);
+        checkArrayCopy(bb);
+
+        bb = fromStringWithPosition(s, 10, true);
+        checkArrayCopy(bb);
+    }
+
+    private void checkArrayCopy(ByteBuffer bb)
+    {
+
+        byte[] bytes = new byte[s.length()];
+        ByteBufferUtil.arrayCopy(bb, bb.position(), bytes, 0, s.length());
+        assertArrayEquals(s.getBytes(), bytes);
+
+        bytes = new byte[5];
+        ByteBufferUtil.arrayCopy(bb, bb.position() + 3, bytes, 1, 4);
+        assertArrayEquals(Arrays.copyOfRange(s.getBytes(), 3, 7), Arrays.copyOfRange(bytes, 1, 5));
+    }
+
+    @Test
+    public void testReadWrite() throws IOException
+    {
+        ByteBuffer bb = ByteBufferUtil.bytes(s);
+        checkReadWrite(bb);
+
+        bb = fromStringWithPosition(s, 10, false);
+        checkReadWrite(bb);
+
+        bb = fromStringWithPosition(s, 10, true);
+        checkReadWrite(bb);
+    }
+
+    private void checkReadWrite(ByteBuffer bb) throws IOException
+    {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        DataOutputStream out = new DataOutputStream(bos);
+        ByteBufferUtil.writeWithLength(bb, out);
+        ByteBufferUtil.writeWithShortLength(bb, out);
+
+        DataInputStream in = new DataInputStream(new ByteArrayInputStream(bos.toByteArray()));
+        assert bb.equals(ByteBufferUtil.readWithLength(in));
+        assert bb.equals(ByteBufferUtil.readWithShortLength(in));
+    }
+
+    @Test
+    public void testInputStream() throws IOException
+    {
+        ByteBuffer bb = ByteBuffer.allocate(13);
+        bb.putInt(255);
+        bb.put((byte) -3);
+        bb.putLong(42L);
+        bb.clear();
+
+        DataInputStream in = new DataInputStream(ByteBufferUtil.inputStream(bb));
+        assert in.readInt() == 255;
+        assert in.readByte() == (byte)-3;
+        assert in.readLong() == 42L;
+    }
+
+    @Test
+    public void testIntBytesConversions()
+    {
+        // positive, negative, 1 and 2 byte cases, including a few edges that would foul things up unless you're careful
+        // about masking away sign extension.
+        int[] ints = new int[]
+        {
+            -20, -127, -128, 0, 1, 127, 128, 65534, 65535, -65534, -65535
+        };
+
+        for (int i : ints) {
+            ByteBuffer ba = ByteBufferUtil.bytes(i);
+            int actual = ByteBufferUtil.toInt(ba);
+            assertEquals(i, actual);
+        }
+    }
+
+    @Test(expected=CharacterCodingException.class)
+    public void testDecode() throws IOException
+    {
+        ByteBuffer bytes = ByteBuffer.wrap(new byte[]{(byte)0xff, (byte)0xfe});
+        ByteBufferUtil.string(bytes, Charsets.UTF_8);
+    }
+
+    @Test
+    public void testHexBytesConversion()
+    {
+        for (int i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; i++)
+        {
+            ByteBuffer bb = ByteBuffer.allocate(1);
+            bb.put((byte)i);
+            bb.clear();
+            String s = ByteBufferUtil.bytesToHex(bb);
+            ByteBuffer bb2 = ByteBufferUtil.hexToBytes(s);
+            assert bb.equals(bb2);
+        }
+    }
+}

Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java?rev=1072028&r1=1072027&r2=1072028&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java Fri Feb 18 15:48:41 2011
@@ -69,27 +69,4 @@ public class FBUtilitiesTest 
             assert Arrays.equals(FBUtilities.hexToBytes(values[i]), expected[i]);
     }
 
-    @Test
-    public void testIntBytesConversions()
-    {
-        // positive, negative, 1 and 2 byte cases, including a few edges that would foul things up unless you're careful
-        // about masking away sign extension.
-        int[] ints = new int[]
-        {
-            -20, -127, -128, 0, 1, 127, 128, 65534, 65535, -65534, -65535
-        };
-
-        for (int i : ints) {
-            ByteBuffer ba = ByteBufferUtil.bytes(i);
-            int actual = ByteBufferUtil.toInt(ba);
-            assertEquals(i, actual);
-        }
-    }
-
-    @Test(expected=CharacterCodingException.class)
-    public void testDecode() throws IOException
-    {
-        ByteBuffer bytes = ByteBuffer.wrap(new byte[]{(byte)0xff, (byte)0xfe});
-        ByteBufferUtil.string(bytes, Charsets.UTF_8);
-    } 
 }