From 9fcf1a7b0063d1b022d8038f8cdcf8675fa5bfdb Mon Sep 17 00:00:00 2001 From: fyrz Date: Thu, 26 Feb 2015 22:35:26 +0100 Subject: [PATCH] [RocksJava] RocksJava Testcases - NativeLibraryLoader Test - EnvironmentTest Bugfix --- java/Makefile | 1 + .../org/rocksdb/NativeLibraryLoaderTest.java | 38 +++++++++++++++++ .../org/rocksdb/util/EnvironmentTest.java | 41 ++++++++++++++++--- 3 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java diff --git a/java/Makefile b/java/Makefile index a07afb20a..e248d0fb7 100644 --- a/java/Makefile +++ b/java/Makefile @@ -74,6 +74,7 @@ JAVA_TESTS = org.rocksdb.BackupableDBOptionsTest\ org.rocksdb.MemTableTest\ org.rocksdb.MergeTest\ org.rocksdb.MixedOptionsTest\ + org.rocksdb.NativeLibraryLoaderTest\ org.rocksdb.OptionsTest\ org.rocksdb.PlainTableConfigTest\ org.rocksdb.ReadOnlyTest\ diff --git a/java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java b/java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java new file mode 100644 index 000000000..7fcb009b5 --- /dev/null +++ b/java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java @@ -0,0 +1,38 @@ +// 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; + +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 java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static org.assertj.core.api.Assertions.assertThat; + +public class NativeLibraryLoaderTest { + + @ClassRule + public static final RocksMemoryResource rocksMemoryResource = + new RocksMemoryResource(); + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + + @Test + public void tempFolder() throws IOException { + NativeLibraryLoader.getInstance().loadLibrary( + temporaryFolder.getRoot().getAbsolutePath()); + Path path = Paths.get(temporaryFolder.getRoot().getAbsolutePath(), + Environment.getJniLibraryFileName("rocksdb")); + assertThat(Files.exists(path)); + assertThat(Files.isReadable(path)); + } +} diff --git a/java/src/test/java/org/rocksdb/util/EnvironmentTest.java b/java/src/test/java/org/rocksdb/util/EnvironmentTest.java index 741effebb..c7160deb6 100644 --- a/java/src/test/java/org/rocksdb/util/EnvironmentTest.java +++ b/java/src/test/java/org/rocksdb/util/EnvironmentTest.java @@ -4,6 +4,8 @@ // of patent rights can be found in the PATENTS file in the same directory. package org.rocksdb.util; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Test; import java.lang.reflect.Field; @@ -12,10 +14,17 @@ import java.lang.reflect.Modifier; import static org.assertj.core.api.Assertions.assertThat; public class EnvironmentTest { + private final static String ARCH_FIELD_NAME = "ARCH"; + private final static String OS_FIELD_NAME = "OS"; - // Init static context - private static Environment environment = - new Environment(); + private static String INITIAL_OS; + private static String INITIAL_ARCH; + + @BeforeClass + public static void saveState() { + INITIAL_ARCH = getEnvironmentClassField(ARCH_FIELD_NAME); + INITIAL_OS = getEnvironmentClassField(OS_FIELD_NAME); + } @Test public void mac32() { @@ -122,11 +131,31 @@ public class EnvironmentTest { private void setEnvironmentClassFields(String osName, String osArch) { - setEnvironmentClassField("OS", osName); - setEnvironmentClassField("ARCH", osArch); + setEnvironmentClassField(OS_FIELD_NAME, osName); + setEnvironmentClassField(ARCH_FIELD_NAME, osArch); } - private void setEnvironmentClassField(String fieldName, String value) { + @AfterClass + public static void restoreState() { + setEnvironmentClassField(OS_FIELD_NAME, INITIAL_OS); + setEnvironmentClassField(ARCH_FIELD_NAME, INITIAL_ARCH); + } + + private static String getEnvironmentClassField(String fieldName) { + final Field field; + try { + field = Environment.class.getDeclaredField(fieldName); + field.setAccessible(true); + final Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + return (String)field.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private static void setEnvironmentClassField(String fieldName, String value) { final Field field; try { field = Environment.class.getDeclaredField(fieldName);