|
|
@ -5,6 +5,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.rocksdb.test; |
|
|
|
package org.rocksdb.test; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.junit.AfterClass; |
|
|
|
import org.junit.ClassRule; |
|
|
|
import org.junit.ClassRule; |
|
|
|
import org.junit.Rule; |
|
|
|
import org.junit.Rule; |
|
|
|
import org.junit.Test; |
|
|
|
import org.junit.Test; |
|
|
@ -14,6 +15,8 @@ import org.rocksdb.*; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
import java.nio.file.FileSystems; |
|
|
|
import java.nio.file.FileSystems; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
|
|
|
|
|
|
|
|
public class ComparatorTest { |
|
|
|
public class ComparatorTest { |
|
|
|
|
|
|
|
|
|
|
|
@ClassRule |
|
|
|
@ClassRule |
|
|
@ -23,6 +26,11 @@ public class ComparatorTest { |
|
|
|
@Rule |
|
|
|
@Rule |
|
|
|
public TemporaryFolder dbFolder = new TemporaryFolder(); |
|
|
|
public TemporaryFolder dbFolder = new TemporaryFolder(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@AfterClass |
|
|
|
|
|
|
|
public static void printMessage(){ |
|
|
|
|
|
|
|
System.out.println("Passed ComparatorTest."); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void shouldTestComparator() throws IOException { |
|
|
|
public void shouldTestComparator() throws IOException { |
|
|
|
|
|
|
|
|
|
|
@ -47,7 +55,126 @@ public class ComparatorTest { |
|
|
|
// test the round-tripability of keys written and read with the Comparator
|
|
|
|
// test the round-tripability of keys written and read with the Comparator
|
|
|
|
comparatorTest.testRoundtrip(FileSystems.getDefault().getPath( |
|
|
|
comparatorTest.testRoundtrip(FileSystems.getDefault().getPath( |
|
|
|
dbFolder.getRoot().getAbsolutePath())); |
|
|
|
dbFolder.getRoot().getAbsolutePath())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
System.out.println("Passed ComparatorTest"); |
|
|
|
@Test |
|
|
|
|
|
|
|
public void shouldTestBuiltinForwardComparator() |
|
|
|
|
|
|
|
throws RocksDBException { |
|
|
|
|
|
|
|
Options options = new Options(); |
|
|
|
|
|
|
|
options.setCreateIfMissing(true); |
|
|
|
|
|
|
|
options.setComparator(BuiltinComparator.BYTEWISE_COMPARATOR); |
|
|
|
|
|
|
|
RocksDB rocksDB = RocksDB.open(options, |
|
|
|
|
|
|
|
dbFolder.getRoot().getAbsolutePath()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rocksDB.put("abc1".getBytes(), "abc1".getBytes()); |
|
|
|
|
|
|
|
rocksDB.put("abc2".getBytes(), "abc2".getBytes()); |
|
|
|
|
|
|
|
rocksDB.put("abc3".getBytes(), "abc3".getBytes()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RocksIterator rocksIterator = rocksDB.newIterator(); |
|
|
|
|
|
|
|
// Iterate over keys using a iterator
|
|
|
|
|
|
|
|
rocksIterator.seekToFirst(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc2".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc2".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isFalse(); |
|
|
|
|
|
|
|
// Get last one
|
|
|
|
|
|
|
|
rocksIterator.seekToLast(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
// Seek for abc
|
|
|
|
|
|
|
|
rocksIterator.seek("abc".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.dispose(); |
|
|
|
|
|
|
|
rocksDB.close(); |
|
|
|
|
|
|
|
options.dispose(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void shouldTestBuiltinReverseComparator() |
|
|
|
|
|
|
|
throws RocksDBException { |
|
|
|
|
|
|
|
Options options = new Options(); |
|
|
|
|
|
|
|
options.setCreateIfMissing(true); |
|
|
|
|
|
|
|
options.setComparator( |
|
|
|
|
|
|
|
BuiltinComparator.REVERSE_BYTEWISE_COMPARATOR); |
|
|
|
|
|
|
|
RocksDB rocksDB = RocksDB.open(options, |
|
|
|
|
|
|
|
dbFolder.getRoot().getAbsolutePath()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rocksDB.put("abc1".getBytes(), "abc1".getBytes()); |
|
|
|
|
|
|
|
rocksDB.put("abc2".getBytes(), "abc2".getBytes()); |
|
|
|
|
|
|
|
rocksDB.put("abc3".getBytes(), "abc3".getBytes()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RocksIterator rocksIterator = rocksDB.newIterator(); |
|
|
|
|
|
|
|
// Iterate over keys using a iterator
|
|
|
|
|
|
|
|
rocksIterator.seekToFirst(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc2".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc2".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.next(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isFalse(); |
|
|
|
|
|
|
|
// Get last one
|
|
|
|
|
|
|
|
rocksIterator.seekToLast(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isTrue(); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc1".getBytes()); |
|
|
|
|
|
|
|
// Will be invalid because abc is after abc1
|
|
|
|
|
|
|
|
rocksIterator.seek("abc".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.isValid()).isFalse(); |
|
|
|
|
|
|
|
// Will be abc3 because the next one after abc999
|
|
|
|
|
|
|
|
// is abc3
|
|
|
|
|
|
|
|
rocksIterator.seek("abc999".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.key()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
assertThat(rocksIterator.value()).isEqualTo( |
|
|
|
|
|
|
|
"abc3".getBytes()); |
|
|
|
|
|
|
|
rocksIterator.dispose(); |
|
|
|
|
|
|
|
rocksDB.close(); |
|
|
|
|
|
|
|
options.dispose(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void shouldTestBuiltinComparatorEnum(){ |
|
|
|
|
|
|
|
assertThat(BuiltinComparator.BYTEWISE_COMPARATOR.ordinal()) |
|
|
|
|
|
|
|
.isEqualTo(0); |
|
|
|
|
|
|
|
assertThat( |
|
|
|
|
|
|
|
BuiltinComparator.REVERSE_BYTEWISE_COMPARATOR.ordinal()) |
|
|
|
|
|
|
|
.isEqualTo(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|