mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-27 20:43:57 +00:00
Add classloader test for Java Logger.
This commit is contained in:
parent
2f4693ce40
commit
eea1dd0ede
|
@ -352,6 +352,7 @@ set(JAVA_TEST_CLASSES
|
||||||
src/test/java/org/rocksdb/KeyExistsTest.java
|
src/test/java/org/rocksdb/KeyExistsTest.java
|
||||||
src/test/java/org/rocksdb/KeyMayExistTest.java
|
src/test/java/org/rocksdb/KeyMayExistTest.java
|
||||||
src/test/java/org/rocksdb/LRUCacheTest.java
|
src/test/java/org/rocksdb/LRUCacheTest.java
|
||||||
|
src/test/java/org/rocksdb/LoggerClassloaderTest.java
|
||||||
src/test/java/org/rocksdb/LoggerTest.java
|
src/test/java/org/rocksdb/LoggerTest.java
|
||||||
src/test/java/org/rocksdb/MemTableTest.java
|
src/test/java/org/rocksdb/MemTableTest.java
|
||||||
src/test/java/org/rocksdb/MemoryUtilTest.java
|
src/test/java/org/rocksdb/MemoryUtilTest.java
|
||||||
|
@ -895,6 +896,9 @@ add_custom_command(
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
${ROCKSDBJNI_CLASSES_TEST_DIR}/org/rocksdb/EventListenerClassloaderTest.class
|
${ROCKSDBJNI_CLASSES_TEST_DIR}/org/rocksdb/EventListenerClassloaderTest.class
|
||||||
${PROJECT_BINARY_DIR}/java/cl-test/org/rocksdb/EventListenerClassloaderTest.class
|
${PROJECT_BINARY_DIR}/java/cl-test/org/rocksdb/EventListenerClassloaderTest.class
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
|
${ROCKSDBJNI_CLASSES_TEST_DIR}/org/rocksdb/LoggerClassloaderTest.class
|
||||||
|
${PROJECT_BINARY_DIR}/java/cl-test/org/rocksdb/LoggerClassloaderTest.class
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -925,5 +929,9 @@ else()
|
||||||
NAME jtest_org.rocksdb.EventListenerClassloaderTest
|
NAME jtest_org.rocksdb.EventListenerClassloaderTest
|
||||||
COMMAND ${Java_JAVA_EXECUTABLE} -ea -Xcheck:jni -Drocks-jar=${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDB_JAR} -classpath ${JAVA_RUN_TESTCLASSPATH}:${PROJECT_BINARY_DIR}/java/cl-test org.junit.runner.JUnitCore org.rocksdb.EventListenerClassloaderTest
|
COMMAND ${Java_JAVA_EXECUTABLE} -ea -Xcheck:jni -Drocks-jar=${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDB_JAR} -classpath ${JAVA_RUN_TESTCLASSPATH}:${PROJECT_BINARY_DIR}/java/cl-test org.junit.runner.JUnitCore org.rocksdb.EventListenerClassloaderTest
|
||||||
)
|
)
|
||||||
|
add_test(
|
||||||
|
NAME jtest_org.rocksdb.LoggerClassloaderTest
|
||||||
|
COMMAND ${Java_JAVA_EXECUTABLE} -ea -Xcheck:jni -Drocks-jar=${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDB_JAR} -classpath ${JAVA_RUN_TESTCLASSPATH}:${PROJECT_BINARY_DIR}/java/cl-test org.junit.runner.JUnitCore org.rocksdb.EventListenerClassloaderTest
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
55
java/src/test/java/org/rocksdb/LoggerClassloaderTest.java
Normal file
55
java/src/test/java/org/rocksdb/LoggerClassloaderTest.java
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package org.rocksdb;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.fail;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only this class can be on default classpath.
|
||||||
|
* It loads rocksDB code with custom classloader and then test that all
|
||||||
|
* log levels for log events can be instantiated.
|
||||||
|
*/
|
||||||
|
public class LoggerClassloaderTest {
|
||||||
|
@Rule public TemporaryFolder dbFolder = new TemporaryFolder();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithCustomClassLoader() throws Exception {
|
||||||
|
try {
|
||||||
|
this.getClass().getClassLoader().loadClass("org.rocksdb.RocksDB");
|
||||||
|
fail("It looks like RocksDB is on classpath. This test must load RocksDB via custom "
|
||||||
|
+ "classLoader"
|
||||||
|
+ " to verify that callback cache all class instances.");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
String jarPath = System.getProperty("rocks-jar");
|
||||||
|
assertThat(jarPath).isNotNull().as("Java property 'rocks-jar' was not setup properly");
|
||||||
|
|
||||||
|
Path classesDir = Paths.get(jarPath);
|
||||||
|
ClassLoader cl = new URLClassLoader(new URL[] {classesDir.toAbsolutePath().toUri().toURL()});
|
||||||
|
|
||||||
|
Class rocksDBclazz = cl.loadClass("org.rocksdb.RocksDB");
|
||||||
|
Method loadLibrary = rocksDBclazz.getMethod("loadLibrary");
|
||||||
|
loadLibrary.invoke(null);
|
||||||
|
|
||||||
|
Class classUnderTest = cl.loadClass("org.rocksdb.LoggerTest");
|
||||||
|
Method customLogger = classUnderTest.getMethod("customLogger");
|
||||||
|
Field dbFolderField = classUnderTest.getDeclaredField("dbFolder");
|
||||||
|
|
||||||
|
Object testInstance = classUnderTest.getDeclaredConstructor().newInstance();
|
||||||
|
|
||||||
|
dbFolderField.set(testInstance, dbFolder);
|
||||||
|
|
||||||
|
customLogger.invoke(testInstance);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue