Skip to content

Commit a91ce90

Browse files
committed
Refactor class-loader test.
1 parent bcffc51 commit a91ce90

File tree

3 files changed

+48
-49
lines changed

3 files changed

+48
-49
lines changed

java/CMakeLists.txt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -887,24 +887,29 @@ add_custom_target(rocksdbjava ALL
887887

888888
enable_testing()
889889
get_target_property(ROCKSDBJNI_CLASSES_TEST_JAR_FILE rocksdbjni_test_classes JAR_FILE)
890-
get_target_property(ROCKSDBJNI_CLASSES_JAR_FILE rocksdbjni_classes JAR_FILE)
891890
get_target_property(ROCKSDBJNI_CLASSES_TEST_DIR rocksdbjni_test_classes CLASSDIR)
892891

893-
894892
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/java/cl-test/org/rocksdb)
895-
add_custom_target(cltest-before
893+
add_custom_command(
894+
TARGET rocksdbjni_test_classes POST_BUILD
896895
COMMAND ${CMAKE_COMMAND} -E copy
897896
${ROCKSDBJNI_CLASSES_TEST_DIR}/org/rocksdb/EventListenerClassloaderTest.class
898897
${PROJECT_BINARY_DIR}/java/cl-test/org/rocksdb/EventListenerClassloaderTest.class
899-
DEPENDS rocksdbjava
900-
)
901-
902-
add_test(
903-
NAME cltest
904-
COMMAND ${Java_JAVA_EXECUTABLE} ${JVMARGS} -ea -Xcheck:jni -Drocks-jar=${ROCKSDBJNI_CLASSES_JAR_FILE} -classpath ${JAVA_RUN_TESTCLASSPATH}:${PROJECT_BINARY_DIR}/java/cl-test org.junit.runner.JUnitCore org.rocksdb.EventListenerClassloaderTest
898+
VERBATIM
905899
)
906900

907-
set_tests_properties(cltest PROPERTIES DEPENDS cltest-before)
901+
#This test must be run with different classpath.
902+
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
903+
add_test(
904+
NAME jtest_org.rocksdb.EventListenerClassloaderTest
905+
COMMAND ${Java_JAVA_EXECUTABLE} ${JVMARGS} -ea -Xcheck:jni -Drocks-jar=${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDB_JAR} -classpath ${JAVA_RUN_TESTCLASSPATH}$<SEMICOLON>${PROJECT_BINARY_DIR}/java/cl-test org.junit.runner.JUnitCore org.rocksdb.EventListenerClassloaderTest
906+
)
907+
else()
908+
add_test(
909+
NAME jtest_org.rocksdb.EventListenerClassloaderTest
910+
COMMAND ${Java_JAVA_EXECUTABLE} ${JVMARGS} -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
911+
)
912+
endif()
908913

909914
foreach (CLAZZ ${JAVA_TEST_RUNNING_CLASSES})
910915
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")

java/rocksjni/testable_event_listener.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
#include <climits>
66
#include <cstdint>
77
#include <iostream>
8-
#include <utility>
98
#include <thread>
9+
#include <utility>
1010

1111
#include "include/org_rocksdb_test_TestableEventListener.h"
1212
#include "rocksdb/listener.h"
@@ -78,9 +78,12 @@ static TableProperties newTablePropertiesForTest() {
7878
* Method: invokeAllCallbacksInThread
7979
* Signature: (J)V
8080
*/
81-
JNIEXPORT void JNICALL Java_org_rocksdb_test_TestableEventListener_invokeAllCallbacksInThread
82-
(JNIEnv *, jclass, jlong jhandle) {
83-
std::thread t1 = std::thread(Java_org_rocksdb_test_TestableEventListener_invokeAllCallbacks, nullptr, nullptr, jhandle);
81+
JNIEXPORT void JNICALL
82+
Java_org_rocksdb_test_TestableEventListener_invokeAllCallbacksInThread(
83+
JNIEnv *, jclass, jlong jhandle) {
84+
std::thread t1 = std::thread(
85+
Java_org_rocksdb_test_TestableEventListener_invokeAllCallbacks, nullptr,
86+
nullptr, jhandle);
8487
t1.join();
8588
}
8689

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,46 @@
11
package org.rocksdb;
22

3-
4-
import org.junit.Test;
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.fail;
55

66
import java.lang.reflect.Method;
77
import java.net.URL;
88
import java.net.URLClassLoader;
99
import java.nio.file.Path;
1010
import java.nio.file.Paths;
11-
12-
import static org.assertj.core.api.Assertions.assertThat;
13-
import static org.assertj.core.api.Assertions.fail;
14-
15-
11+
import org.junit.Test;
1612

1713
/**
1814
* Only this class can be on default classpath.
1915
* It loads rocksDB code with custom classloader and then test that all
2016
* event data for event listener can be instantiated.
2117
*/
2218
public class EventListenerClassloaderTest {
19+
@Test
20+
public void testCallback() throws Exception {
21+
try {
22+
this.getClass().getClassLoader().loadClass("org.rocksdb.RocksDB");
23+
fail("It looks like RocksDB is on classpath. This test must load RocksDB via custom "
24+
+ "classLoader"
25+
+ " to verify that callback cache all class instances.");
26+
} catch (ClassNotFoundException e) {
27+
;
28+
}
2329

30+
String jarPath = System.getProperty("rocks-jar");
31+
assertThat(jarPath).isNotNull().as("Java property 'rocks-jar' was not setup properly");
2432

25-
@Test
26-
public void testCallback() throws Exception {
27-
28-
try {
29-
this.getClass().getClassLoader().loadClass("org.rocksdb.RocksDB");
30-
fail("It looks like RocksDB is on classpath. This test must load RocksDB via custom classLoader" +
31-
" to verify callback cache all class instances.");
32-
}catch (ClassNotFoundException e) {
33-
;
34-
}
35-
36-
String jarPath = System.getProperty("rocks-jar");
37-
assertThat(jarPath).isNotNull().as("Java property 'rocks-jar' was not setup properly");
38-
39-
Path classesDir = Paths.get(jarPath);
40-
ClassLoader cl = new URLClassLoader(new URL[]{
41-
classesDir.toAbsolutePath().toUri().toURL()
42-
});
43-
44-
Class rocksDBclazz = cl.loadClass("org.rocksdb.RocksDB");
45-
Method loadLibrary = rocksDBclazz.getMethod("loadLibrary");
46-
loadLibrary.invoke(null);
47-
48-
Class testableEventListenerClazz = cl.loadClass("org.rocksdb.test.TestableEventListener");
49-
Method invokeAllCallbacksInThread = testableEventListenerClazz.getMethod("invokeAllCallbacksInThread");
50-
Object instance = testableEventListenerClazz.getDeclaredConstructor().newInstance();
51-
invokeAllCallbacksInThread.invoke(instance);
33+
Path classesDir = Paths.get(jarPath);
34+
ClassLoader cl = new URLClassLoader(new URL[] {classesDir.toAbsolutePath().toUri().toURL()});
5235

36+
Class rocksDBclazz = cl.loadClass("org.rocksdb.RocksDB");
37+
Method loadLibrary = rocksDBclazz.getMethod("loadLibrary");
38+
loadLibrary.invoke(null);
5339

54-
}
40+
Class testableEventListenerClazz = cl.loadClass("org.rocksdb.test.TestableEventListener");
41+
Method invokeAllCallbacksInThread =
42+
testableEventListenerClazz.getMethod("invokeAllCallbacksInThread");
43+
Object instance = testableEventListenerClazz.getDeclaredConstructor().newInstance();
44+
invokeAllCallbacksInThread.invoke(instance);
45+
}
5546
}

0 commit comments

Comments
 (0)