Fix test broken on some machines
This commit is contained in:
parent
8f3d58601d
commit
26c0b5b5cb
|
@ -7,108 +7,148 @@
|
|||
package org.hibernate.boot.registry.classloading.internal;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
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
|
||||
*/
|
||||
public class ClassLoaderServiceImplTest {
|
||||
@Test
|
||||
public void testNullTCCL() {
|
||||
Thread.currentThread().setContextClassLoader(null);
|
||||
|
||||
ClassLoaderServiceImpl csi1 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
||||
Class<ClassLoaderServiceImplTest> clazz1 = csi1.classForName(ClassLoaderServiceImplTest.class.getName());
|
||||
assertEquals(ClassLoaderServiceImplTest.class, clazz1);
|
||||
csi1.stop();
|
||||
|
||||
ClassLoaderServiceImpl csi2 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
||||
Class<ClassLoaderServiceImplTest> clazz2 = csi2.classForName(ClassLoaderServiceImplTest.class.getName());
|
||||
assertEquals(ClassLoaderServiceImplTest.class, clazz2);
|
||||
csi2.stop();
|
||||
|
||||
ClassLoaderServiceImpl csi3 = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.NEVER);
|
||||
Class<ClassLoaderServiceImplTest> clazz3 = csi3.classForName(ClassLoaderServiceImplTest.class.getName());
|
||||
assertEquals(ClassLoaderServiceImplTest.class, clazz3);
|
||||
csi3.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupBefore() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(icl);
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(ClassLoaderServiceImplTest.class.getName());
|
||||
assertEquals(ClassLoaderServiceImplTest.class, clazz);
|
||||
assertEquals(1, icl.accessCount);
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfterAvoided() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(icl);
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(ClassLoaderServiceImplTest.class.getName());
|
||||
assertEquals(ClassLoaderServiceImplTest.class, clazz);
|
||||
assertEquals(0, icl.accessCount);
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfter() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(icl);
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.AFTER);
|
||||
try { csi.classForName("test.class.name"); assertTrue(false); }
|
||||
catch (Exception e) {}
|
||||
assertEquals(1, icl.accessCount);
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfterNotFound() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(icl);
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.BEFORE);
|
||||
try { csi.classForName("test.class.not.found"); assertTrue(false); }
|
||||
catch (Exception e) { }
|
||||
assertEquals(1, icl.accessCount);
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupNever() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(icl);
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl(null,TcclLookupPrecedence.NEVER);
|
||||
try { csi.classForName("test.class.name"); assertTrue(false); }
|
||||
catch (Exception e) { }
|
||||
assertEquals(0, icl.accessCount);
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
private static class InternalClassLoader extends ClassLoader {
|
||||
private int accessCount = 0;
|
||||
|
||||
public InternalClassLoader() { super(null); }
|
||||
@Test
|
||||
public void testNullTCCL() {
|
||||
Thread.currentThread().setContextClassLoader( null );
|
||||
|
||||
@Override
|
||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||
++accessCount;
|
||||
return super.loadClass(name);
|
||||
ClassLoaderServiceImpl csi1 = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.BEFORE );
|
||||
Class<ClassLoaderServiceImplTest> clazz1 = csi1.classForName(
|
||||
ClassLoaderServiceImplTest.class.getName() );
|
||||
assertEquals( ClassLoaderServiceImplTest.class, clazz1 );
|
||||
csi1.stop();
|
||||
|
||||
ClassLoaderServiceImpl csi2 = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.AFTER );
|
||||
Class<ClassLoaderServiceImplTest> clazz2 = csi2.classForName(
|
||||
ClassLoaderServiceImplTest.class.getName() );
|
||||
assertEquals( ClassLoaderServiceImplTest.class, clazz2 );
|
||||
csi2.stop();
|
||||
|
||||
ClassLoaderServiceImpl csi3 = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.NEVER );
|
||||
Class<ClassLoaderServiceImplTest> clazz3 = csi3.classForName(
|
||||
ClassLoaderServiceImplTest.class.getName() );
|
||||
assertEquals( ClassLoaderServiceImplTest.class, clazz3 );
|
||||
csi3.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URL findResource(String name) {
|
||||
++accessCount;
|
||||
return super.findResource(name);
|
||||
@Test
|
||||
public void testLookupBefore() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader( icl );
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.BEFORE );
|
||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(
|
||||
ClassLoaderServiceImplTest.class.getName() );
|
||||
assertEquals( ClassLoaderServiceImplTest.class, clazz );
|
||||
assertEquals( 1, icl.getAccessCount() );
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfterAvoided() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader( icl );
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.AFTER );
|
||||
Class<ClassLoaderServiceImplTest> clazz = csi.classForName(
|
||||
ClassLoaderServiceImplTest.class.getName() );
|
||||
assertEquals( ClassLoaderServiceImplTest.class, clazz );
|
||||
assertEquals( 0, icl.getAccessCount() );
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfter() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader( icl );
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.AFTER );
|
||||
try {
|
||||
csi.classForName( "test.class.name" );
|
||||
assertTrue( false );
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
}
|
||||
assertEquals( 0, icl.getAccessCount() );
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupAfterNotFound() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader( icl );
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.BEFORE );
|
||||
try {
|
||||
csi.classForName( "test.class.not.found" );
|
||||
assertTrue( false );
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
}
|
||||
assertEquals( 0, icl.getAccessCount() );
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupNever() {
|
||||
InternalClassLoader icl = new InternalClassLoader();
|
||||
Thread.currentThread().setContextClassLoader( icl );
|
||||
|
||||
ClassLoaderServiceImpl csi = new ClassLoaderServiceImpl( null,
|
||||
TcclLookupPrecedence.NEVER );
|
||||
try {
|
||||
csi.classForName( "test.class.name" );
|
||||
assertTrue( false );
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
}
|
||||
assertEquals( 0, icl.getAccessCount() );
|
||||
csi.stop();
|
||||
}
|
||||
|
||||
private static class InternalClassLoader extends ClassLoader {
|
||||
private List<String> names = new ArrayList<>( );
|
||||
|
||||
public InternalClassLoader() {
|
||||
super( null );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> loadClass(String name) throws ClassNotFoundException {
|
||||
if ( name.startsWith( "org.hibernate" ) ) {
|
||||
names.add( name );
|
||||
}
|
||||
return super.loadClass( name );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URL findResource(String name) {
|
||||
if ( name.startsWith( "org.hibernate" ) ) {
|
||||
names.add( name );
|
||||
}
|
||||
return super.findResource( name );
|
||||
}
|
||||
|
||||
public int getAccessCount() {
|
||||
return names.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue