From 183e31c0e78920b50a704780c022291a6139c032 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 21 Mar 2014 15:16:28 +0000
Subject: [PATCH] OPENDJ-1368 (CR-3232) Remove AttributeValue
---
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestJebFormat.java | 113 ++++++++++++++++++++++---------------
opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java | 24 ++++++-
2 files changed, 88 insertions(+), 49 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
index 9813c65..fabaa25 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
@@ -63,6 +63,7 @@
*
* @param bytes The database value of the entry ID.
* @return The entry ID value.
+ * @see #entryIDToDatabase(long)
*/
public static long entryIDFromDatabase(byte[] bytes)
{
@@ -100,6 +101,8 @@
*
* @param bytes The database value of the entry ID count.
* @return The entry ID count.
+ * Cannot be negative if encoded with #entryIDUndefinedSizeToDatabase(long)
+ * @see #entryIDUndefinedSizeToDatabase(long)
*/
public static long entryIDUndefinedSizeFromDatabase(byte[] bytes)
{
@@ -110,7 +113,14 @@
if(bytes.length == 8)
{
- return entryIDFromDatabase(bytes);
+ long v = 0;
+ v |= (bytes[0] & 0x7F);
+ for (int i = 1; i < 8; i++)
+ {
+ v <<= 8;
+ v |= (bytes[i] & 0xFF);
+ }
+ return v;
}
return Long.MAX_VALUE;
}
@@ -122,8 +132,8 @@
* hence no entry IDs. Note that this method will throw an
* ArrayIndexOutOfBoundsException if the bytes array length is
* not a multiple of 8.
- *
* @return An array of entry ID values.
+ * @see #entryIDListToDatabase(long[])
*/
public static long[] entryIDListFromDatabase(byte[] bytes)
{
@@ -174,8 +184,10 @@
/**
* Encode an entry ID value to its database representation.
+ *
* @param id The entry ID value to be encoded.
* @return The encoded database value of the entry ID.
+ * @see #entryIDFromDatabase(byte[])
*/
public static byte[] entryIDToDatabase(long id)
{
@@ -191,8 +203,10 @@
/**
* Encode an entry ID set count to its database representation.
+ *
* @param count The entry ID set count to be encoded.
- * @return The encoded database value of the entry ID.
+ * @return The encoded database value of the entry ID set count.
+ * @see #entryIDUndefinedSizeFromDatabase(byte[])
*/
public static byte[] entryIDUndefinedSizeToDatabase(long count)
{
@@ -211,8 +225,8 @@
* Encode an array of entry ID values to its database representation.
*
* @param entryIDArray An array of entry ID values.
- *
* @return The encoded database value.
+ * @see #entryIDListFromDatabase(byte[])
*/
public static byte[] entryIDListToDatabase(long[] entryIDArray)
{
@@ -248,6 +262,7 @@
* @param prefix The DN to prefix the deocded DN value.
* @return The decoded DN value.
* @throws DirectoryException if an error occurs while decoding the DN value.
+ * @see #dnToDNKey(DN, int)
*/
public static DN dnFromDNKey(byte[] dnKey, int offset, int length, DN prefix)
throws DirectoryException
@@ -332,6 +347,7 @@
* @param prefixRDNs The number of prefix RDNs to remove from the encoded
* representation.
* @return A DatabaseEntry containing the key.
+ * @see #dnFromDNKey(byte[], int, int, DN)
*/
public static byte[] dnToDNKey(DN dn, int prefixRDNs)
{
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestJebFormat.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestJebFormat.java
index 87eef15..57a6443 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestJebFormat.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestJebFormat.java
@@ -26,29 +26,28 @@
*/
package org.opends.server.backends.jeb;
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertTrue;
-
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.opends.server.TestCaseUtils;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.*;
-import org.forgerock.opendj.ldap.ByteString;
-import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.StaticUtils;
-import static org.opends.server.util.StaticUtils.getBytes;
-
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
+import static org.opends.server.util.StaticUtils.*;
+import static org.testng.Assert.*;
+
/**
* JebFormat Tester.
*/
+@SuppressWarnings("javadoc")
public class TestJebFormat extends JebTestCase {
private static final String ldifString =
"dn: uid=user.1,ou=People,dc=example,dc=com\n"
@@ -134,55 +133,79 @@
+ "cn;lang-en: Rodney Ogasawara\n"
+ "title;lang-en: Sales, Director\n" + "\n" + "";
- /**
- * Test entry IDs.
- *
- * @throws Exception
- * If the test failed unexpectedly.
- */
- @Test()
- public void testEntryIDToAndFromDatabase() throws Exception {
- long[] vals = { 128, 1234567, 0, 1, -1, 2 ^ 32 - 1, 2 ^ 63 - 1 };
-
- for (long before : vals) {
- byte[] bytes = JebFormat.entryIDToDatabase(before);
- long after = JebFormat.entryIDFromDatabase(bytes);
-
- assertEquals(before, after);
- }
+ @DataProvider
+ public Object[][] entryIDToAndFromDatabaseDataProvider()
+ {
+ return new Object[][] {
+ { 128 }, { 1234567 }, { 0 }, { 1 }, { -1 },
+ { 2 ^ 32 - 1 }, { 2 ^ 63 - 1 }, { Long.MIN_VALUE }, { Long.MAX_VALUE },
+ };
}
- private void entryIDListToAndFromDatabase(long[] before) throws Exception {
- byte[] bytes = JebFormat.entryIDListToDatabase(before);
- /*
- * printError(String.format("encoded count=%d len=%d",
- * before.length, bytes.length));
- */
- long[] after = JebFormat.entryIDListFromDatabase(bytes);
+ /**
+ * Test entry IDs.
+ */
+ @Test(dataProvider = "entryIDToAndFromDatabaseDataProvider")
+ public void testEntryIDToAndFromDatabase(long before) throws Exception
+ {
+ byte[] bytes = JebFormat.entryIDToDatabase(before);
+ long after = JebFormat.entryIDFromDatabase(bytes);
+ assertEquals(after, before);
+ }
- assertTrue(Arrays.equals(before, after));
+ @DataProvider
+ public Object[][] entryIDUndefinedSizeToAndFromDatabaseDataProvider()
+ {
+ return new Object[][] {
+ { 128 }, { 1234567 }, { 0 }, { 1 },
+ { 2 ^ 32 - 1 }, { 2 ^ 63 - 1 }, { Long.MAX_VALUE },
+ };
+ }
+
+ /**
+ * Test entry ID set counts.
+ */
+ @Test(dataProvider = "entryIDUndefinedSizeToAndFromDatabaseDataProvider")
+ public void testEntryIDUndefinedSizeToAndFromDatabase(long before) throws Exception
+ {
+ byte[] bytes = JebFormat.entryIDUndefinedSizeToDatabase(before);
+ assertEquals(bytes[0] & 0x80, 0x80);
+ long after = JebFormat.entryIDUndefinedSizeFromDatabase(bytes);
+ assertEquals(after, before);
+ }
+
+ @Test
+ public void testEntryIDUndefinedSizeFromDatabase() throws Exception
+ {
+ assertEquals(JebFormat.entryIDUndefinedSizeFromDatabase(null), 0);
+ assertEquals(JebFormat.entryIDUndefinedSizeFromDatabase(new byte[0]), Long.MAX_VALUE);
+ assertEquals(JebFormat.entryIDUndefinedSizeFromDatabase(new byte[9]), Long.MAX_VALUE);
}
/**
* Test entry ID lists.
- *
- * @throws Exception
- * If the test failed unexpectedly.
*/
- @Test()
- public void testEntryIDListToAndFromDatabase() throws Exception {
- long[] array;
- array = new long[] { 1, 2, 3, 4, 5 };
- entryIDListToAndFromDatabase(array);
- array = new long[] { 999999 };
- entryIDListToAndFromDatabase(array);
- array = new long[] { 1, 128, 1234567 };
- entryIDListToAndFromDatabase(array);
- array = new long[100000];
+ @Test(dataProvider = "entryIDListToAndFromDatabaseDataProvider")
+ public void entryIDListToAndFromDatabase(long[] before) throws Exception
+ {
+ byte[] bytes = JebFormat.entryIDListToDatabase(before);
+ long[] after = JebFormat.entryIDListFromDatabase(bytes);
+ assertTrue(Arrays.equals(before, after));
+ }
+
+ @DataProvider
+ public Object[][] entryIDListToAndFromDatabaseDataProvider() throws Exception
+ {
+ long[] array = new long[100000];
for (int i = 0; i < 100000; i++) {
array[i] = i * 2 + 1;
}
- entryIDListToAndFromDatabase(array);
+ return new Object[][] {
+ { new long[] { 1, 2, 3, 4, 5 } },
+ { new long[] { 999999 } },
+ { new long[] { 1, 128, 1234567 } },
+ { array },
+ };
}
/**
--
Gitblit v1.10.0