From 2dbe144bb71fa8e7dc8dbcf6cf45a4451adccdbe Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Mon, 29 Aug 2011 11:47:04 -0700 Subject: [PATCH] another test to verify that f322503d3a615ad259877a4cf7b07c2129a13298 is achieving its purpose --- .../test/java/hudson/PluginManagerTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/src/test/java/hudson/PluginManagerTest.java b/test/src/test/java/hudson/PluginManagerTest.java index e91950581c..fd47f6a6ca 100644 --- a/test/src/test/java/hudson/PluginManagerTest.java +++ b/test/src/test/java/hudson/PluginManagerTest.java @@ -25,13 +25,18 @@ package hudson; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; +import hudson.PluginManager.UberClassLoader; +import hudson.model.Hudson; import hudson.scm.SubversionSCM; import org.apache.commons.io.FileUtils; import org.jvnet.hudson.test.HudsonTestCase; +import org.jvnet.hudson.test.Url; import org.jvnet.hudson.test.recipes.WithPlugin; import org.jvnet.hudson.test.recipes.WithPluginManager; import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; /** * @author Kohsuke Kawaguchi @@ -124,4 +129,31 @@ public class PluginManagerTest extends HudsonTestCase { }; } } + + + /** + * Makes sure that thread context classloader isn't used by {@link UberClassLoader}, or else + * infinite cycle ensues. + */ + @Url("http://jenkins.361315.n4.nabble.com/channel-example-and-plugin-classes-gives-ClassNotFoundException-td3756092.html") + public void testUberClassLoaderDoesntUseContextClassLoader() throws Exception { + Thread t = Thread.currentThread(); + + URLClassLoader ucl = new URLClassLoader(new URL[0],hudson.pluginManager.uberClassLoader); + + ClassLoader old = t.getContextClassLoader(); + t.setContextClassLoader(ucl); + try { + try { + ucl.loadClass("No such class"); + fail(); + } catch (ClassNotFoundException e) { + // as expected + } + + ucl.loadClass(Hudson.class.getName()); + } finally { + t.setContextClassLoader(old); + } + } } -- GitLab