From df310fa66969c2058dbb1f8f23e90a4d717df44c Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 02 Apr 2015 10:16:45 +0000
Subject: [PATCH] OPENDJ-1711 - re-implement VLV support for pluggable backends
---
opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/ControlsTestCase.java | 71 +++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 0 deletions(-)
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/ControlsTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/ControlsTestCase.java
index 85060d2..061a550 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/ControlsTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/ControlsTestCase.java
@@ -43,6 +43,7 @@
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.server.DirectoryServerTestCase;
@@ -169,6 +170,76 @@
}
@DataProvider
+ private Object[][] encodedKeyDataProvider()
+ {
+ // @formatter:off
+ return new Object[][] {
+ // Null keys sort after everything else.
+ { null, null, 0 },
+ { "", null, -1 },
+ { null, "", 1 },
+ { "00", null, -1 },
+ { null, "00", 1 },
+ { "ff", null, -1 },
+ { null, "ff", 1 },
+
+ // Empty keys sort before everything else.
+ { "", "", 0 },
+ { "00", "", 1 },
+ { "", "00", -1 },
+ { "ff", "", 1 },
+ { "", "ff", -1 },
+
+ // Bytes comparisons are unsigned.
+ { "00", "00", 0 },
+ { "00", "ff", -1 },
+ { "ff", "00", 1 },
+ { "ff", "ff", 0 },
+
+ // Short keys sort before long keys.
+ { "0000", "00", 1 },
+ { "00", "0000", -1 },
+ { "ffff", "ff", 1 },
+ { "ff", "ffff", -1 },
+ { "0000", "0000", 0 },
+ { "ffff", "ffff", 0 },
+ { "0000", "ffff", -1 },
+ { "ffff", "0000", 1 },
+ };
+ // @formatter:on
+ }
+
+ @Test(dataProvider = "encodedKeyDataProvider")
+ public void vlvKeyEncodingGenerateCorrectAscendingSortOrder(String key1, String key2, int expectedCompareResult)
+ {
+ ByteString bytes1 = key1 != null ? ByteString.valueOfHex(key1) : null;
+ ByteStringBuilder encodedBytes1 = new ByteStringBuilder();
+ VLVIndex.encodeVLVKeyValue(bytes1, encodedBytes1, true);
+
+ ByteString bytes2 = key2 != null ? ByteString.valueOfHex(key2) : null;
+ ByteStringBuilder encodedBytes2 = new ByteStringBuilder();
+ VLVIndex.encodeVLVKeyValue(bytes2, encodedBytes2, true);
+
+ int actualResult = Math.min(Math.max(encodedBytes1.compareTo(encodedBytes2), -1), 1);
+ assertThat(actualResult).isEqualTo(expectedCompareResult);
+ }
+
+ @Test(dataProvider = "encodedKeyDataProvider")
+ public void vlvKeyEncodingGenerateCorrectDescendingSortOrder(String key1, String key2, int expectedCompareResult)
+ {
+ ByteString bytes1 = key1 != null ? ByteString.valueOfHex(key1) : null;
+ ByteStringBuilder encodedBytes1 = new ByteStringBuilder();
+ VLVIndex.encodeVLVKeyValue(bytes1, encodedBytes1, false);
+
+ ByteString bytes2 = key2 != null ? ByteString.valueOfHex(key2) : null;
+ ByteStringBuilder encodedBytes2 = new ByteStringBuilder();
+ VLVIndex.encodeVLVKeyValue(bytes2, encodedBytes2, false);
+
+ int actualResult = Math.min(Math.max(encodedBytes1.compareTo(encodedBytes2), -1), 1);
+ assertThat(actualResult).isEqualTo(-expectedCompareResult);
+ }
+
+ @DataProvider
private Object[][] indexedVlvByAssertionDataProvider()
{
// @formatter:off
--
Gitblit v1.10.0