mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-26 16:30:56 +00:00
Test for WriteBatchWithIndex#newIteratorWithBase(org.rocksdb.RocksIterator)
This commit is contained in:
parent
2241e3f4d5
commit
be905491bf
|
@ -81,6 +81,7 @@ JAVA_TESTS = org.rocksdb.test.BackupableDBOptionsTest\
|
|||
org.rocksdb.test.WriteBatchHandlerTest\
|
||||
org.rocksdb.test.WriteBatchTest\
|
||||
org.rocksdb.test.WriteOptionsTest\
|
||||
org.rocksdb.test.WriteBatchWithIndexTest
|
||||
|
||||
JAVA_TEST_LIBDIR = ./test-libs/
|
||||
JAVA_JUNIT_JAR = $(JAVA_TEST_LIBDIR)junit-4.12-beta-2.jar
|
||||
|
|
113
java/org/rocksdb/test/WriteBatchWithIndexTest.java
Normal file
113
java/org/rocksdb/test/WriteBatchWithIndexTest.java
Normal file
|
@ -0,0 +1,113 @@
|
|||
// 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.
|
||||
//
|
||||
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
||||
|
||||
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 static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
|
||||
public class WriteBatchWithIndexTest {
|
||||
|
||||
@ClassRule
|
||||
public static final RocksMemoryResource rocksMemoryResource =
|
||||
new RocksMemoryResource();
|
||||
|
||||
@Rule
|
||||
public TemporaryFolder dbFolder = new TemporaryFolder();
|
||||
|
||||
@Test
|
||||
public void readYourOwnWrites() throws RocksDBException {
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
// Setup options
|
||||
options.setCreateIfMissing(true);
|
||||
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath());
|
||||
|
||||
final byte[] k1 = "key1".getBytes();
|
||||
final byte[] v1 = "value1".getBytes();
|
||||
final byte[] k2 = "key2".getBytes();
|
||||
final byte[] v2 = "value2".getBytes();
|
||||
|
||||
db.put(k1, v1);
|
||||
db.put(k2, v2);
|
||||
|
||||
final WriteBatchWithIndex wbwi = new WriteBatchWithIndex(true);
|
||||
|
||||
RocksIterator base = null;
|
||||
RocksIterator it = null;
|
||||
try {
|
||||
base = db.newIterator();
|
||||
it = wbwi.newIteratorWithBase(base);
|
||||
|
||||
it.seek(k1);
|
||||
assertThat(it.isValid()).isTrue();
|
||||
assertThat(it.key()).isEqualTo(k1);
|
||||
assertThat(it.value()).isEqualTo(v1);
|
||||
|
||||
it.seek(k2);
|
||||
assertThat(it.isValid()).isTrue();
|
||||
assertThat(it.key()).isEqualTo(k2);
|
||||
assertThat(it.value()).isEqualTo(v2);
|
||||
|
||||
//put data to the write batch and make sure we can read it.
|
||||
final byte[] k3 = "key3".getBytes();
|
||||
final byte[] v3 = "value3".getBytes();
|
||||
wbwi.put(k3, v3);
|
||||
it.seek(k3);
|
||||
assertThat(it.isValid()).isTrue();
|
||||
assertThat(it.key()).isEqualTo(k3);
|
||||
assertThat(it.value()).isEqualTo(v3);
|
||||
|
||||
//update k2 in the write batch and check the value
|
||||
final byte[] v2Other = "otherValue2".getBytes();
|
||||
wbwi.put(k2, v2Other);
|
||||
it.seek(k2);
|
||||
assertThat(it.isValid()).isTrue();
|
||||
assertThat(it.key()).isEqualTo(k2);
|
||||
assertThat(it.value()).isEqualTo(v2Other);
|
||||
|
||||
//remove k1 and make sure we can read back the write
|
||||
wbwi.remove(k1);
|
||||
it.seek(k1);
|
||||
assertThat(it.key()).isNotEqualTo(k1);
|
||||
|
||||
//reinsert k1 and make sure we see the new value
|
||||
final byte[] v1Other = "otherValue1".getBytes();
|
||||
wbwi.put(k1, v1Other);
|
||||
it.seek(k1);
|
||||
assertThat(it.isValid()).isTrue();
|
||||
assertThat(it.key()).isEqualTo(k1);
|
||||
assertThat(it.value()).isEqualTo(v1Other);
|
||||
} finally {
|
||||
if (it != null) {
|
||||
it.dispose();
|
||||
}
|
||||
if (base != null) {
|
||||
base.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue