/* * Copyright (c) 2005, Rob Gordon. */ package org.oddjob.launch; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.util.HashSet; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.oddjob.Main; import org.oddjob.io.CopyJob; import org.oddjob.tools.OurDirs; import org.oddjob.util.URLClassLoaderType; /** * * @author Rob Gordon. */ public class LauncherTest extends TestCase { private static final Logger logger = Logger.getLogger(LauncherTest.class); String oddjobHome; @Override protected void setUp() throws Exception { logger.debug("------------------ " + getName() + " -----------------"); oddjobHome = System.getProperty("oddjob.home"); } @Override protected void tearDown() throws Exception { if (oddjobHome == null) { System.getProperties().remove("oddjob.home"); } else { System.setProperty("oddjob.home", oddjobHome); } } public void testGetClassLoader() throws IOException, URISyntaxException { OurDirs dirs = new OurDirs(); File f = dirs.relative("src/java"); ClassLoader cl = Launcher.getClassLoader( LauncherTest.class.getClassLoader(), new String[] { f.getPath() } ); assertNotNull("Classloader", cl); URL[] urls = ((URLClassLoader)cl).getURLs(); HashSet<String> results = new HashSet<String>(); for (int i = 0; i < urls.length; ++i) { results.add(new File(urls[i].toURI()).getCanonicalPath()); System.out.println(urls[i]); } assertTrue(results.contains( f.getCanonicalPath())); assertTrue(System.getProperty( "java.class.path").contains( f.getCanonicalPath())); assertEquals(Thread.currentThread().getContextClassLoader(), ClassLoader.getSystemClassLoader()); } public void testInitOddjob() throws Exception { OurDirs dirs = new OurDirs(); File result = new File(dirs.base(), "work/launcher.result"); result.delete(); System.setProperty("oddjob.home", new File(".").getCanonicalPath()); Launcher test = new Launcher(); String args[] = { "-nb", "-f", dirs.base() + "/test/conf/launcher-test.xml", dirs.base().toString() }; test.setArgs(args); test.setClassLoader(Main.class.getClassLoader()); test.setClassName(Launcher.ODDJOB_MAIN_CLASS); test.run(); ByteArrayOutputStream out = new ByteArrayOutputStream(); CopyJob copy = new CopyJob(); copy.setFrom(new File[] { result }); copy.setOutput(out); copy.run(); assertEquals("Launcher Worked", out.toString().trim()); assertEquals(new File(".").getCanonicalPath(), System.getProperty("oddjob.home")); assertEquals(Thread.currentThread().getContextClassLoader(), ClassLoader.getSystemClassLoader()); } public void testLaunchAsJob() throws Exception { OurDirs dirs = new OurDirs(); File result = new File(dirs.base(), "work/launcher.result"); result.delete(); System.setProperty("oddjob.home", "Will Be Overritten"); File runJar = dirs.relative("run-oddjob.jar"); URLClassLoaderType classLoader = new URLClassLoaderType(); classLoader.setFiles(new File[] { runJar }); classLoader.setNoInherit(true); classLoader.configured(); ClassLoader context = Thread.currentThread().getContextClassLoader(); assertNotNull(context); try { Thread.currentThread().setContextClassLoader(null); Launcher boot = new Launcher(); boot.setClassLoader(classLoader.toValue()); boot.setClassName(Launcher.class.getName()); boot.setArgs(new String[] { "-f", dirs.relative("test/conf/launcher-boot.xml").getPath() }); boot.run(); } finally { Thread.currentThread().setContextClassLoader(context); } ByteArrayOutputStream out = new ByteArrayOutputStream(); CopyJob copy = new CopyJob(); copy.setFrom(new File[] { result }); copy.setOutput(out); copy.run(); assertEquals("Launcher Worked", out.toString().trim()); assertEquals(runJar.getParentFile().getCanonicalPath(), System.getProperty("oddjob.home")); assertEquals(Thread.currentThread().getContextClassLoader(), ClassLoader.getSystemClassLoader()); } }