Fix test broken on some machines

This commit is contained in:
Vlad Mihalcea 2016-11-28 16:47:49 +02:00
parent 8f3d58601d
commit 26c0b5b5cb

View File

@ -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();
} }
} }
} }