donaldp 2002/10/30 23:00:05
Added: loader/src/test/org/apache/excalibur/loader/test
IntegrationTestCase.java config1.xml
Log:
Add in unit test that verifies the whole setup works as expected.
Revision Changes Path
1.1
jakarta-avalon-excalibur/loader/src/test/org/apache/excalibur/loader/test/IntegrationTestCase.java
Index: IntegrationTestCase.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.loader.test;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.excalibur.loader.builder.DefaultLoaderResolver;
import org.apache.excalibur.loader.builder.LoaderBuilder;
import org.apache.excalibur.loader.metadata.ClassLoaderSetMetaData;
import org.apache.excalibur.loader.verifier.ClassLoaderVerifier;
/**
*
* @author <a href="mailto:peter at apache.org">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/10/31 07:00:05 $
*/
public class IntegrationTestCase
extends AbstractLoaderTestCase
{
public IntegrationTestCase( final String name )
{
super( name );
}
public void testPresence()
throws Exception
{
final Map map = buildClassLoaders( "config1.xml" );
assertPresent( map, "LOADER_1" );
assertPresent( map, "LOADER_2" );
assertPresent( map, "LOADER_3" );
assertPresent( map, "LOADER_4" );
assertPresent( map, "LOADER_5" );
assertPresent( map, "JOIN_1" );
final String[] files1 = new String[]{"cl1.jar"};
final String[] files2 = new String[]{"cl2.jar"};
final String[] files3 = new String[]{"cl1.jar", "cl2.jar"};
final String[] files4 =
new String[]{"SAR-INF/lib/cl3.jar", "SAR-INF/lib/cl4.jar"};
final String[] files5 = new String[]{"SAR-INF/lib/cl4.jar"};
assertURLsPresent( map, "LOADER_1", files1 );
assertURLsPresent( map, "LOADER_2", files2 );
assertURLsPresent( map, "LOADER_3", files3 );
assertURLsPresent( map, "LOADER_4", files4 );
assertURLsPresent( map, "LOADER_5", files5 );
assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS );
assertClassPresent( map, "LOADER_1", DataConstants.DATA1_CLASS2 );
assertClassPresent( map, "LOADER_2", DataConstants.DATA2_CLASS );
assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS );
assertClassPresent( map, "LOADER_3", DataConstants.DATA1_CLASS2 );
assertClassPresent( map, "LOADER_3", DataConstants.DATA2_CLASS );
assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS );
assertClassPresent( map, "LOADER_4", DataConstants.DATA1_CLASS2 );
assertClassPresent( map, "LOADER_4", DataConstants.DATA3_CLASS );
assertClassPresent( map, "LOADER_4", DataConstants.DATA4_CLASS );
assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS );
assertClassPresent( map, "LOADER_5", DataConstants.DATA1_CLASS2 );
assertClassPresent( map, "LOADER_5", DataConstants.DATA4_CLASS );
assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS );
assertClassPresent( map, "JOIN_1", DataConstants.DATA1_CLASS2 );
assertClassPresent( map, "JOIN_1", DataConstants.DATA2_CLASS );
}
private void assertClassPresent( final Map map,
final String name,
final String classname )
{
final ClassLoader classLoader = (ClassLoader)map.get( name );
try
{
classLoader.loadClass( classname );
}
catch( ClassNotFoundException e )
{
fail( "Unable to load " + classname + " from " +
name + " classloader" );
}
}
private void assertURLsPresent( final Map map,
final String name,
final String[] files )
{
final URLClassLoader classLoader = (URLClassLoader)map.get( name );
final URL[] urls = classLoader.getURLs();
assertEquals( "URL count:", files.length, urls.length );
for( int i = 0; i < urls.length; i++ )
{
final URL url = urls[ i ];
final String file = files[ i ];
assertTrue( "url=" + url + " ends with " + file,
url.getFile().endsWith( file ) );
}
}
private void assertPresent( final Map map,
final String name )
{
assertTrue( "map.containsKey( '" + name + "' )",
map.containsKey( name ) );
final Object object = map.get( name );
if( object instanceof URLClassLoader )
{
final URLClassLoader classLoader = (URLClassLoader)object;
final URL[] urls = classLoader.getURLs();
System.out.println( name + ": " + Arrays.asList( urls ) );
}
}
private Map buildClassLoaders( final String resource )
throws Exception
{
final ClassLoaderSetMetaData metaData =
buildFromResource( resource );
final ClassLoaderVerifier verifier = new ClassLoaderVerifier();
verifier.verifyClassLoaderSet( metaData );
final LoaderBuilder builder = new LoaderBuilder();
final HashMap predefined = new HashMap();
predefined.put( "*system*", ClassLoader.getSystemClassLoader() );
final File baseDirectory = new File( "." );
final DefaultLoaderResolver resolver =
new DefaultLoaderResolver( baseDirectory, null );
return builder.buildClassLoaders( metaData, resolver, predefined );
}
}
1.1
jakarta-avalon-excalibur/loader/src/test/org/apache/excalibur/loader/test/config1.xml
Index: config1.xml
===================================================================
<classloaders default="*system*" version="1.0">
<predefined name="*system*"/>
<classloader name="LOADER_1" parent="*system*">
<entry location="cl1.jar"/>
</classloader>
<classloader name="LOADER_2" parent="*system*">
<entry location="cl2.jar"/>
</classloader>
<classloader name="LOADER_3" parent="*system*">
<fileset dir=".">
<include name="**/*.jar"/>
<exclude name="SAR-INF/lib/*.jar"/>
</fileset>
</classloader>
<classloader name="LOADER_4" parent="LOADER_1">
<fileset dir=".">
<include name="SAR-INF/lib/*.jar"/>
</fileset>
</classloader>
<classloader name="LOADER_5" parent="LOADER_1">
<fileset dir=".">
<include name="SAR-INF/**/cl4.jar"/>
</fileset>
</classloader>
<join name="JOIN_1">
<classloader-ref name="LOADER_1"/>
<classloader-ref name="LOADER_2"/>
</join>
</classloaders>
--
To unsubscribe, e-mail: <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>