--- /dev/null
+// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
+// This source code is licensed under both the GPLv2 (found in the
+// COPYING file in the root directory) and Apache 2.0 License
+// (found in the LICENSE.Apache file in the root directory).
+
+package org.rocksdb;
+
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.nio.charset.StandardCharsets;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class StatisticsTest {
+
+ @ClassRule
+ public static final RocksMemoryResource rocksMemoryResource =
+ new RocksMemoryResource();
+
+ @Rule
+ public TemporaryFolder dbFolder = new TemporaryFolder();
+
+ @Test
+ public void statsLevel() throws RocksDBException {
+ final Statistics statistics = new Statistics();
+ statistics.setStatsLevel(StatsLevel.ALL);
+ assertThat(statistics.statsLevel()).isEqualTo(StatsLevel.ALL);
+ }
+
+ @Test
+ public void getTickerCount() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+
+ final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
+
+ db.put(key, value);
+ for(int i = 0; i < 10; i++) {
+ db.get(key);
+ }
+
+ assertThat(statistics.getTickerCount(TickerType.BYTES_READ)).isGreaterThan(0);
+ }
+ }
+
+ @Test
+ public void getAndResetTickerCount() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+
+ final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
+
+ db.put(key, value);
+ for(int i = 0; i < 10; i++) {
+ db.get(key);
+ }
+
+ final long read = statistics.getAndResetTickerCount(TickerType.BYTES_READ);
+ assertThat(read).isGreaterThan(0);
+
+ final long readAfterReset = statistics.getTickerCount(TickerType.BYTES_READ);
+ assertThat(readAfterReset).isLessThan(read);
+ }
+ }
+
+ @Test
+ public void getHistogramData() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+
+ final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
+
+ db.put(key, value);
+ for(int i = 0; i < 10; i++) {
+ db.get(key);
+ }
+
+ final HistogramData histogramData = statistics.getHistogramData(HistogramType.BYTES_PER_READ);
+ assertThat(histogramData).isNotNull();
+ assertThat(histogramData.getAverage()).isGreaterThan(0);
+ }
+ }
+
+ @Test
+ public void getHistogramString() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+
+ final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
+
+ for(int i = 0; i < 10; i++) {
+ db.put(key, value);
+ }
+
+ assertThat(statistics.getHistogramString(HistogramType.BYTES_PER_WRITE)).isNotNull();
+ }
+ }
+
+ @Test
+ public void reset() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+
+ final byte[] key = "some-key".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "some-value".getBytes(StandardCharsets.UTF_8);
+
+ db.put(key, value);
+ for(int i = 0; i < 10; i++) {
+ db.get(key);
+ }
+
+ final long read = statistics.getTickerCount(TickerType.BYTES_READ);
+ assertThat(read).isGreaterThan(0);
+
+ statistics.reset();
+
+ final long readAfterReset = statistics.getTickerCount(TickerType.BYTES_READ);
+ assertThat(readAfterReset).isLessThan(read);
+ }
+ }
+
+ @Test
+ public void ToString() throws RocksDBException {
+ try (final Statistics statistics = new Statistics();
+ final Options opt = new Options()
+ .setStatistics(statistics)
+ .setCreateIfMissing(true);
+ final RocksDB db = RocksDB.open(opt,
+ dbFolder.getRoot().getAbsolutePath())) {
+ assertThat(statistics.toString()).isNotNull();
+ }
+ }
+}