mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-08 12:14:47 +00:00
Fix test broken on some machines
This commit is contained in:
parent
8f3d58601d
commit
26c0b5b5cb
@ -7,8 +7,13 @@
|
|||||||
package org.hibernate.boot.registry.classloading.internal;
|
package org.hibernate.boot.registry.classloading.internal;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Cédric Tabin
|
* @author Cédric Tabin
|
||||||
@ -16,99 +21,134 @@
|
|||||||
public class ClassLoaderServiceImplTest {
|
public class ClassLoaderServiceImplTest {
|
||||||
@Test
|
@Test
|
||||||
public void testNullTCCL() {
|
public void testNullTCCL() {
|
||||||
Thread.currentThread().setContextClassLoader(null);
|
Thread.currentThread().setContextClassLoader( null );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi1 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
ClassLoaderServiceImpl csi1 = new ClassLoaderServiceImpl( null,
|
||||||
Class<ClassLoaderServiceImplTest> clazz1 = csi1.classForName(ClassLoaderServiceImplTest.class.getName());
|
TcclLookupPrecedence.BEFORE );
|
||||||
assertEquals(ClassLoaderServiceImplTest.class, clazz1);
|
Class<ClassLoaderServiceImplTest> clazz1 = csi1.classForName(
|
||||||
|
ClassLoaderServiceImplTest.class.getName() );
|
||||||
|
assertEquals( ClassLoaderServiceImplTest.class, clazz1 );
|
||||||
csi1.stop();
|
csi1.stop();
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi2 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
ClassLoaderServiceImpl csi2 = new ClassLoaderServiceImpl( null,
|
||||||
Class<ClassLoaderServiceImplTest> clazz2 = csi2.classForName(ClassLoaderServiceImplTest.class.getName());
|
TcclLookupPrecedence.AFTER );
|
||||||
assertEquals(ClassLoaderServiceImplTest.class, clazz2);
|
Class<ClassLoaderServiceImplTest> clazz2 = csi2.classForName(
|
||||||
|
ClassLoaderServiceImplTest.class.getName() );
|
||||||
|
assertEquals( ClassLoaderServiceImplTest.class, clazz2 );
|
||||||
csi2.stop();
|
csi2.stop();
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi3 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.NEVER);
|
ClassLoaderServiceImpl csi3 = new ClassLoaderServiceImpl( null,
|
||||||
Class<ClassLoaderServiceImplTest> clazz3 = csi3.classForName(ClassLoaderServiceImplTest.class.getName());
|
TcclLookupPrecedence.NEVER );
|
||||||
assertEquals(ClassLoaderServiceImplTest.class, clazz3);
|
Class<ClassLoaderServiceImplTest> clazz3 = csi3.classForName(
|
||||||
|
ClassLoaderServiceImplTest.class.getName() );
|
||||||
|
assertEquals( ClassLoaderServiceImplTest.class, clazz3 );
|
||||||
csi3.stop();
|
csi3.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLookupBefore() {
|
public void testLookupBefore() {
|
||||||
InternalClassLoader icl = new InternalClassLoader();
|
InternalClassLoader icl = new InternalClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(icl);
|
Thread.currentThread().setContextClassLoader( icl );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(ClassLoaderServiceImplTest.class.getName());
|
TcclLookupPrecedence.BEFORE );
|
||||||
assertEquals(ClassLoaderServiceImplTest.class, clazz);
|
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(
|
||||||
assertEquals(1, icl.accessCount);
|
ClassLoaderServiceImplTest.class.getName() );
|
||||||
|
assertEquals( ClassLoaderServiceImplTest.class, clazz );
|
||||||
|
assertEquals( 1, icl.getAccessCount() );
|
||||||
csi.stop();
|
csi.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLookupAfterAvoided() {
|
public void testLookupAfterAvoided() {
|
||||||
InternalClassLoader icl = new InternalClassLoader();
|
InternalClassLoader icl = new InternalClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(icl);
|
Thread.currentThread().setContextClassLoader( icl );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(ClassLoaderServiceImplTest.class.getName());
|
TcclLookupPrecedence.AFTER );
|
||||||
assertEquals(ClassLoaderServiceImplTest.class, clazz);
|
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(
|
||||||
assertEquals(0, icl.accessCount);
|
ClassLoaderServiceImplTest.class.getName() );
|
||||||
|
assertEquals( ClassLoaderServiceImplTest.class, clazz );
|
||||||
|
assertEquals( 0, icl.getAccessCount() );
|
||||||
csi.stop();
|
csi.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLookupAfter() {
|
public void testLookupAfter() {
|
||||||
InternalClassLoader icl = new InternalClassLoader();
|
InternalClassLoader icl = new InternalClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(icl);
|
Thread.currentThread().setContextClassLoader( icl );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||||
try { csi.classForName("test.class.name"); assertTrue(false); }
|
TcclLookupPrecedence.AFTER );
|
||||||
catch (Exception e) {}
|
try {
|
||||||
assertEquals(1, icl.accessCount);
|
csi.classForName( "test.class.name" );
|
||||||
|
assertTrue( false );
|
||||||
|
}
|
||||||
|
catch ( Exception e ) {
|
||||||
|
}
|
||||||
|
assertEquals( 0, icl.getAccessCount() );
|
||||||
csi.stop();
|
csi.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLookupAfterNotFound() {
|
public void testLookupAfterNotFound() {
|
||||||
InternalClassLoader icl = new InternalClassLoader();
|
InternalClassLoader icl = new InternalClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(icl);
|
Thread.currentThread().setContextClassLoader( icl );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||||
try { csi.classForName("test.class.not.found"); assertTrue(false); }
|
TcclLookupPrecedence.BEFORE );
|
||||||
catch (Exception e) { }
|
try {
|
||||||
assertEquals(1, icl.accessCount);
|
csi.classForName( "test.class.not.found" );
|
||||||
|
assertTrue( false );
|
||||||
|
}
|
||||||
|
catch ( Exception e ) {
|
||||||
|
}
|
||||||
|
assertEquals( 0, icl.getAccessCount() );
|
||||||
csi.stop();
|
csi.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLookupNever() {
|
public void testLookupNever() {
|
||||||
InternalClassLoader icl = new InternalClassLoader();
|
InternalClassLoader icl = new InternalClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(icl);
|
Thread.currentThread().setContextClassLoader( icl );
|
||||||
|
|
||||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.NEVER);
|
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||||
try { csi.classForName("test.class.name"); assertTrue(false); }
|
TcclLookupPrecedence.NEVER );
|
||||||
catch (Exception e) { }
|
try {
|
||||||
assertEquals(0, icl.accessCount);
|
csi.classForName( "test.class.name" );
|
||||||
|
assertTrue( false );
|
||||||
|
}
|
||||||
|
catch ( Exception e ) {
|
||||||
|
}
|
||||||
|
assertEquals( 0, icl.getAccessCount() );
|
||||||
csi.stop();
|
csi.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InternalClassLoader extends ClassLoader {
|
private static class InternalClassLoader extends ClassLoader {
|
||||||
private int accessCount = 0;
|
private List<String> names = new ArrayList<>( );
|
||||||
|
|
||||||
public InternalClassLoader() { super(null); }
|
public InternalClassLoader() {
|
||||||
|
super( null );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||||
++accessCount;
|
if ( name.startsWith( "org.hibernate" ) ) {
|
||||||
return super.loadClass(name);
|
names.add( name );
|
||||||
|
}
|
||||||
|
return super.loadClass( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected URL findResource(String name) {
|
protected URL findResource(String name) {
|
||||||
++accessCount;
|
if ( name.startsWith( "org.hibernate" ) ) {
|
||||||
return super.findResource(name);
|
names.add( name );
|
||||||
|
}
|
||||||
|
return super.findResource( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAccessCount() {
|
||||||
|
return names.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user