[RocksJava] Fix NativeLibraryLoader

- Resolve problem while using a temporary data folder
- Fix test
main
fyrz 10 years ago
parent 485ac0dbd0
commit f210b0f6c5
  1. 2
      java/Makefile
  2. 6
      java/src/main/java/org/rocksdb/NativeLibraryLoader.java
  3. 15
      java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java

@ -172,7 +172,7 @@ java_test: resolve_test_deps
javah -cp $(MAIN_CLASSES):$(TEST_CLASSES) -d $(NATIVE_INCLUDE) -jni $(NATIVE_JAVA_TEST_CLASSES)
test: java resolve_test_deps java_test
java -ea -Xcheck:jni -Djava.library.path=target -cp "$(MAIN_CLASSES):$(TEST_CLASSES):$(JAVA_TESTCLASSPATH)" org.rocksdb.test.RocksJunitRunner $(JAVA_TESTS)
java -ea -Xcheck:jni -Djava.library.path=target -cp "$(MAIN_CLASSES):$(TEST_CLASSES):$(JAVA_TESTCLASSPATH):target/*" org.rocksdb.test.RocksJunitRunner $(JAVA_TESTS)
db_bench: java
mkdir -p $(BENCHMARK_MAIN_CLASSES)

@ -72,7 +72,7 @@ public class NativeLibraryLoader {
*
* @throws java.io.IOException if a filesystem operation fails.
*/
private void loadLibraryFromJar(final String tmpDir)
void loadLibraryFromJar(final String tmpDir)
throws IOException {
if (!initialized) {
final File temp;
@ -80,6 +80,10 @@ public class NativeLibraryLoader {
temp = File.createTempFile(tempFilePrefix, tempFileSuffix);
} else {
temp = new File(tmpDir, jniLibraryFileName);
if (!temp.createNewFile()) {
throw new RuntimeException("File: " + temp.getAbsolutePath()
+ " could not be created.");
}
}
if (!temp.exists()) {

@ -4,35 +4,28 @@
// 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 java.nio.file.*;
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(
NativeLibraryLoader.getInstance().loadLibraryFromJar(
temporaryFolder.getRoot().getAbsolutePath());
Path path = Paths.get(temporaryFolder.getRoot().getAbsolutePath(),
Environment.getJniLibraryFileName("rocksdb"));
assertThat(Files.exists(path));
assertThat(Files.isReadable(path));
assertThat(Files.exists(path)).isTrue();
assertThat(Files.isReadable(path)).isTrue();
}
}

Loading…
Cancel
Save