| package org.rocksdb; |
| |
| import org.junit.ClassRule; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TemporaryFolder; |
| import org.rocksdb.util.Environment; |
| |
| import java.io.IOException; |
| |
| import static java.nio.file.Files.readAllBytes; |
| import static java.nio.file.Paths.get; |
| import static org.assertj.core.api.Assertions.assertThat; |
| |
| public class InfoLogLevelTest { |
| |
| @ClassRule |
| public static final RocksMemoryResource rocksMemoryResource = |
| new RocksMemoryResource(); |
| |
| @Rule |
| public TemporaryFolder dbFolder = new TemporaryFolder(); |
| |
| @Test |
| public void testInfoLogLevel() throws RocksDBException, |
| IOException { |
| try (final RocksDB db = |
| RocksDB.open(dbFolder.getRoot().getAbsolutePath())) { |
| db.put("key".getBytes(), "value".getBytes()); |
| assertThat(getLogContentsWithoutHeader()).isNotEmpty(); |
| } |
| } |
| |
| @Test |
| public void testFatalLogLevel() throws RocksDBException, |
| IOException { |
| try (final Options options = new Options(). |
| setCreateIfMissing(true). |
| setInfoLogLevel(InfoLogLevel.FATAL_LEVEL); |
| final RocksDB db = RocksDB.open(options, |
| dbFolder.getRoot().getAbsolutePath())) { |
| assertThat(options.infoLogLevel()). |
| isEqualTo(InfoLogLevel.FATAL_LEVEL); |
| db.put("key".getBytes(), "value".getBytes()); |
| // As InfoLogLevel is set to FATAL_LEVEL, here we expect the log |
| // content to be empty. |
| assertThat(getLogContentsWithoutHeader()).isEmpty(); |
| } |
| } |
| |
| @Test |
| public void testFatalLogLevelWithDBOptions() |
| throws RocksDBException, IOException { |
| try (final DBOptions dbOptions = new DBOptions(). |
| setInfoLogLevel(InfoLogLevel.FATAL_LEVEL); |
| final Options options = new Options(dbOptions, |
| new ColumnFamilyOptions()). |
| setCreateIfMissing(true); |
| final RocksDB db = |
| RocksDB.open(options, dbFolder.getRoot().getAbsolutePath())) { |
| assertThat(dbOptions.infoLogLevel()). |
| isEqualTo(InfoLogLevel.FATAL_LEVEL); |
| assertThat(options.infoLogLevel()). |
| isEqualTo(InfoLogLevel.FATAL_LEVEL); |
| db.put("key".getBytes(), "value".getBytes()); |
| assertThat(getLogContentsWithoutHeader()).isEmpty(); |
| } |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void failIfIllegalByteValueProvided() { |
| InfoLogLevel.getInfoLogLevel((byte) -1); |
| } |
| |
| @Test |
| public void valueOf() { |
| assertThat(InfoLogLevel.valueOf("DEBUG_LEVEL")). |
| isEqualTo(InfoLogLevel.DEBUG_LEVEL); |
| } |
| |
| /** |
| * Read LOG file contents into String. |
| * |
| * @return LOG file contents as String. |
| * @throws IOException if file is not found. |
| */ |
| private String getLogContentsWithoutHeader() throws IOException { |
| final String separator = Environment.isWindows() ? |
| "\n" : System.getProperty("line.separator"); |
| final String[] lines = new String(readAllBytes(get( |
| dbFolder.getRoot().getAbsolutePath() + "/LOG"))).split(separator); |
| |
| int first_non_header = lines.length; |
| // Identify the last line of the header |
| for (int i = lines.length - 1; i >= 0; --i) { |
| if (lines[i].indexOf("Options.") >= 0 && lines[i].indexOf(':') >= 0) { |
| first_non_header = i + 1; |
| break; |
| } |
| } |
| StringBuilder builder = new StringBuilder(); |
| for (int i = first_non_header; i < lines.length; ++i) { |
| builder.append(lines[i]).append(separator); |
| } |
| return builder.toString(); |
| } |
| } |