HHH-16911 Don't wait for 3m in the self-test of ClassLoaderLeaksUtilityTest

This commit is contained in:
Sanne Grinovero 2023-07-30 23:42:00 +01:00 committed by Sanne Grinovero
parent b758ddafa6
commit b562c81c76
3 changed files with 9 additions and 2 deletions

View File

@ -38,6 +38,11 @@ public final class ClassLoaderLeakDetector {
return PhantomReferenceLeakDetector.verifyActionNotLeaking( () -> actionInClassloader( fullClassnameOfRunnableAction ) );
}
static boolean verifyActionNotLeakingClassloader(String fullClassnameOfRunnableAction, final int gcAttempts, final int totalWaitSeconds) {
Objects.requireNonNull( fullClassnameOfRunnableAction );
return PhantomReferenceLeakDetector.verifyActionNotLeaking( () -> actionInClassloader( fullClassnameOfRunnableAction ), gcAttempts, totalWaitSeconds );
}
public static ClassLoader actionInClassloader(final String actionName) {
final Thread currentThread = Thread.currentThread();
final ClassLoader initialClassloader = currentThread.getContextClassLoader();

View File

@ -16,7 +16,9 @@ public class ClassLoaderLeaksUtilityTest {
@Test
public void testClassLoaderLeaksDetected() {
Assert.assertFalse( ClassLoaderLeakDetector.verifyActionNotLeakingClassloader( "org.hibernate.orm.test.bootstrap.registry.classloading.LeakingTestAction" ) );
//N.B. since we expect to timeout in this case, reduce the timeouts to not require
//a significant amount of time during each ORM test run.
Assert.assertFalse( ClassLoaderLeakDetector.verifyActionNotLeakingClassloader( "org.hibernate.orm.test.bootstrap.registry.classloading.LeakingTestAction", 2 , 2 ) );
}
@Test

View File

@ -74,7 +74,7 @@ public final class PhantomReferenceLeakDetector {
/**
* Exposed for self-testing w/o having to wait for the regular timeout
*/
static <T> boolean verifyActionNotLeaking(Supplier<T> action, final int gcAttempts, final int totalWaitSeconds ) {
static <T> boolean verifyActionNotLeaking(Supplier<T> action, final int gcAttempts, final int totalWaitSeconds) {
T criticalReference = action.get();
final ReferenceQueue<T> referenceQueue = new ReferenceQueue<>();
final PhantomReference<T> reference = new PhantomReference<>( criticalReference, referenceQueue );