parent
628e39e97d
commit
74057d6d2d
@ -0,0 +1,282 @@ |
|||||||
|
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under the BSD-style license found in the
|
||||||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
package org.rocksdb.test; |
||||||
|
|
||||||
|
import org.junit.ClassRule; |
||||||
|
import org.junit.Rule; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.rules.TemporaryFolder; |
||||||
|
import org.rocksdb.*; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
public class RocksDBTest { |
||||||
|
|
||||||
|
@ClassRule |
||||||
|
public static final RocksMemoryResource rocksMemoryResource = |
||||||
|
new RocksMemoryResource(); |
||||||
|
|
||||||
|
@Rule |
||||||
|
public TemporaryFolder dbFolder = new TemporaryFolder(); |
||||||
|
|
||||||
|
@Test |
||||||
|
public void open() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
Options opt = null; |
||||||
|
try { |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
db.close(); |
||||||
|
opt = new Options(); |
||||||
|
opt.setCreateIfMissing(true); |
||||||
|
db = RocksDB.open(opt, dbFolder.getRoot().getAbsolutePath()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (opt != null) { |
||||||
|
opt.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void put() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
WriteOptions opt = null; |
||||||
|
try { |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
opt = new WriteOptions(); |
||||||
|
db.put(opt, "key2".getBytes(), "12345678".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"value".getBytes()); |
||||||
|
assertThat(db.get("key2".getBytes())).isEqualTo( |
||||||
|
"12345678".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (opt != null) { |
||||||
|
opt.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void write() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
Options options = null; |
||||||
|
WriteBatch wb1 = null; |
||||||
|
WriteBatch wb2 = null; |
||||||
|
WriteOptions opts = null; |
||||||
|
try { |
||||||
|
options = new Options(). |
||||||
|
setMergeOperator(new StringAppendOperator()). |
||||||
|
setCreateIfMissing(true); |
||||||
|
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath()); |
||||||
|
opts = new WriteOptions(); |
||||||
|
wb1 = new WriteBatch(); |
||||||
|
wb1.put("key1".getBytes(), "aa".getBytes()); |
||||||
|
wb1.merge("key1".getBytes(), "bb".getBytes()); |
||||||
|
wb2 = new WriteBatch(); |
||||||
|
wb2.put("key2".getBytes(), "xx".getBytes()); |
||||||
|
wb2.merge("key2".getBytes(), "yy".getBytes()); |
||||||
|
db.write(opts, wb1); |
||||||
|
db.write(opts, wb2); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"aa,bb".getBytes()); |
||||||
|
assertThat(db.get("key2".getBytes())).isEqualTo( |
||||||
|
"xx,yy".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (wb1 != null) { |
||||||
|
wb1.dispose(); |
||||||
|
} |
||||||
|
if (wb2 != null) { |
||||||
|
wb2.dispose(); |
||||||
|
} |
||||||
|
if (options != null) { |
||||||
|
options.dispose(); |
||||||
|
} |
||||||
|
if (opts != null) { |
||||||
|
opts.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getWithOutValue() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
try { |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
db.put("key2".getBytes(), "12345678".getBytes()); |
||||||
|
byte[] outValue = new byte[5]; |
||||||
|
// not found value
|
||||||
|
int getResult = db.get("keyNotFound".getBytes(), outValue); |
||||||
|
assertThat(getResult).isEqualTo(RocksDB.NOT_FOUND); |
||||||
|
// found value which fits in outValue
|
||||||
|
getResult = db.get("key1".getBytes(), outValue); |
||||||
|
assertThat(getResult).isNotEqualTo(RocksDB.NOT_FOUND); |
||||||
|
assertThat(outValue).isEqualTo("value".getBytes()); |
||||||
|
// found value which fits partially
|
||||||
|
getResult = db.get("key2".getBytes(), outValue); |
||||||
|
assertThat(getResult).isNotEqualTo(RocksDB.NOT_FOUND); |
||||||
|
assertThat(outValue).isEqualTo("12345".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getWithOutValueReadOptions() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
ReadOptions rOpt = null; |
||||||
|
try { |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
rOpt = new ReadOptions(); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
db.put("key2".getBytes(), "12345678".getBytes()); |
||||||
|
byte[] outValue = new byte[5]; |
||||||
|
// not found value
|
||||||
|
int getResult = db.get(rOpt, "keyNotFound".getBytes(), |
||||||
|
outValue); |
||||||
|
assertThat(getResult).isEqualTo(RocksDB.NOT_FOUND); |
||||||
|
// found value which fits in outValue
|
||||||
|
getResult = db.get(rOpt, "key1".getBytes(), outValue); |
||||||
|
assertThat(getResult).isNotEqualTo(RocksDB.NOT_FOUND); |
||||||
|
assertThat(outValue).isEqualTo("value".getBytes()); |
||||||
|
// found value which fits partially
|
||||||
|
getResult = db.get(rOpt, "key2".getBytes(), outValue); |
||||||
|
assertThat(getResult).isNotEqualTo(RocksDB.NOT_FOUND); |
||||||
|
assertThat(outValue).isEqualTo("12345".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (rOpt != null) { |
||||||
|
rOpt.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void multiGet() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
ReadOptions rOpt = null; |
||||||
|
try { |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
rOpt = new ReadOptions(); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
db.put("key2".getBytes(), "12345678".getBytes()); |
||||||
|
List<byte[]> lookupKeys = new ArrayList<byte[]>() {{ |
||||||
|
add("key1".getBytes()); |
||||||
|
add("key2".getBytes()); |
||||||
|
}}; |
||||||
|
Map<byte[], byte[]> results = db.multiGet(lookupKeys); |
||||||
|
assertThat(results).isNotNull(); |
||||||
|
assertThat(results.values()).isNotNull(); |
||||||
|
assertThat(results.values()). |
||||||
|
contains("value".getBytes(), "12345678".getBytes()); |
||||||
|
// test same method with ReadOptions
|
||||||
|
results = db.multiGet(rOpt, lookupKeys); |
||||||
|
assertThat(results).isNotNull(); |
||||||
|
assertThat(results.values()).isNotNull(); |
||||||
|
assertThat(results.values()). |
||||||
|
contains("value".getBytes(), "12345678".getBytes()); |
||||||
|
|
||||||
|
// remove existing key
|
||||||
|
lookupKeys.remove("key2".getBytes()); |
||||||
|
// add non existing key
|
||||||
|
lookupKeys.add("key3".getBytes()); |
||||||
|
results = db.multiGet(lookupKeys); |
||||||
|
assertThat(results).isNotNull(); |
||||||
|
assertThat(results.values()).isNotNull(); |
||||||
|
assertThat(results.values()). |
||||||
|
contains("value".getBytes()); |
||||||
|
// test same call with readOptions
|
||||||
|
results = db.multiGet(rOpt, lookupKeys); |
||||||
|
assertThat(results).isNotNull(); |
||||||
|
assertThat(results.values()).isNotNull(); |
||||||
|
assertThat(results.values()). |
||||||
|
contains("value".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (rOpt != null) { |
||||||
|
rOpt.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void merge() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
Options opt = null; |
||||||
|
WriteOptions wOpt; |
||||||
|
try { |
||||||
|
opt = new Options(). |
||||||
|
setCreateIfMissing(true). |
||||||
|
setMergeOperator(new StringAppendOperator()); |
||||||
|
wOpt = new WriteOptions(); |
||||||
|
db = RocksDB.open(opt, dbFolder.getRoot().getAbsolutePath()); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"value".getBytes()); |
||||||
|
// merge key1 with another value portion
|
||||||
|
db.merge("key1".getBytes(), "value2".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"value,value2".getBytes()); |
||||||
|
// merge key1 with another value portion
|
||||||
|
db.merge(wOpt, "key1".getBytes(), "value3".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"value,value2,value3".getBytes()); |
||||||
|
// merge on non existent key shall insert the value
|
||||||
|
db.merge(wOpt, "key2".getBytes(), "xxxx".getBytes()); |
||||||
|
assertThat(db.get("key2".getBytes())).isEqualTo( |
||||||
|
"xxxx".getBytes()); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
if (opt != null) { |
||||||
|
opt.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void remove() throws RocksDBException { |
||||||
|
RocksDB db = null; |
||||||
|
WriteOptions wOpt; |
||||||
|
try { |
||||||
|
wOpt = new WriteOptions(); |
||||||
|
db = RocksDB.open(dbFolder.getRoot().getAbsolutePath()); |
||||||
|
db.put("key1".getBytes(), "value".getBytes()); |
||||||
|
db.put("key2".getBytes(), "12345678".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isEqualTo( |
||||||
|
"value".getBytes()); |
||||||
|
assertThat(db.get("key2".getBytes())).isEqualTo( |
||||||
|
"12345678".getBytes()); |
||||||
|
db.remove("key1".getBytes()); |
||||||
|
db.remove(wOpt, "key2".getBytes()); |
||||||
|
assertThat(db.get("key1".getBytes())).isNull(); |
||||||
|
assertThat(db.get("key2".getBytes())).isNull(); |
||||||
|
} finally { |
||||||
|
if (db != null) { |
||||||
|
db.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under the BSD-style license found in the
|
||||||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
package org.rocksdb.test; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
import org.rocksdb.util.SizeUnit; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
public class SizeUnitTest { |
||||||
|
|
||||||
|
public static final long COMPUTATION_UNIT = 1024L; |
||||||
|
|
||||||
|
@Test |
||||||
|
public void sizeUnit() { |
||||||
|
assertThat(SizeUnit.KB).isEqualTo(COMPUTATION_UNIT); |
||||||
|
assertThat(SizeUnit.MB).isEqualTo( |
||||||
|
SizeUnit.KB * COMPUTATION_UNIT); |
||||||
|
assertThat(SizeUnit.GB).isEqualTo( |
||||||
|
SizeUnit.MB * COMPUTATION_UNIT); |
||||||
|
assertThat(SizeUnit.TB).isEqualTo( |
||||||
|
SizeUnit.GB * COMPUTATION_UNIT); |
||||||
|
assertThat(SizeUnit.PB).isEqualTo( |
||||||
|
SizeUnit.TB * COMPUTATION_UNIT); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue