1 17 18 package org.apache.geronimo.classloaderserver.http; 19 20 import java.io.InputStream ; 21 import java.net.URI ; 22 import java.net.URL ; 23 import java.net.URLClassLoader ; 24 import java.util.HashSet ; 25 import java.util.Set ; 26 27 import javax.management.ObjectName ; 28 29 import junit.framework.TestCase; 30 31 import org.apache.geronimo.classloaderserver.ClassLoaderInfo; 32 import org.apache.geronimo.gbean.GBeanData; 33 import org.apache.geronimo.jetty.JettyContainerImpl; 34 import org.apache.geronimo.jetty.connector.HTTPConnector; 35 import org.apache.geronimo.kernel.KernelFactory; 36 import org.apache.geronimo.kernel.Kernel; 37 38 39 43 public class HTTPClassLoaderServerTest extends TestCase { 44 private ClassLoader cl = this.getClass().getClassLoader(); 45 private ObjectName containerName; 46 private ObjectName connectorName; 47 private ObjectName classLoaderServerName; 48 private MockClassLoaderInfo clInfo; 49 private Kernel kernel; 50 51 public void testURLs() throws Exception { 52 assertEquals(1, clInfo.urls.length); 53 } 54 55 public void testOK() throws Exception { 56 URLClassLoader urlCL = new URLClassLoader (clInfo.urls, null); 57 String className = HTTPClassLoaderServerTest.class.getName(); 58 Class clazz = urlCL.loadClass(className); 59 assertEquals(className, clazz.getName()); 60 } 61 62 public void testNOK() throws Exception { 63 URLClassLoader urlCL = new URLClassLoader (clInfo.urls, null); 64 try { 65 urlCL.loadClass("Test"); 66 fail(); 67 } catch (ClassNotFoundException e) { 68 } 69 } 70 71 private void start(GBeanData instance) throws Exception { 72 kernel.loadGBean(instance, cl); 73 kernel.startGBean(instance.getName()); 74 } 75 76 private void stop(ObjectName name) throws Exception { 77 kernel.stopGBean(name); 78 kernel.unloadGBean(name); 79 } 80 81 protected void setUp() throws Exception { 82 containerName = new ObjectName ("geronimo.jetty:role=Container"); 83 Set containerPatterns = new HashSet (); 84 containerPatterns.add(containerName); 85 connectorName = new ObjectName ("geronimo.jetty:role=Connector"); 86 Set connectorPatterns = new HashSet (); 87 connectorPatterns.add(connectorName); 88 kernel = KernelFactory.newInstance().createKernel("test.kernel"); 89 kernel.boot(); 90 GBeanData container = new GBeanData(containerName, JettyContainerImpl.GBEAN_INFO); 91 start(container); 92 93 int port = 5678; 94 GBeanData connector = new GBeanData(connectorName, HTTPConnector.GBEAN_INFO); 95 connector.setAttribute("port", new Integer (port)); 96 connector.setReferencePatterns("JettyContainer", containerPatterns); 97 start(connector); 98 99 classLoaderServerName = new ObjectName ("geronimo.jetty:role=ClassLoaderServer"); 100 GBeanData classLoaderServer = new GBeanData(classLoaderServerName, HTTPClassLoaderServer.GBEAN_INFO); 101 classLoaderServer.setReferencePatterns("JettyContainer", containerPatterns); 102 classLoaderServer.setReferencePatterns("JettyConnector", connectorPatterns); 103 start(classLoaderServer); 104 105 clInfo = new MockClassLoaderInfo(new URI ("test"), getClass().getClassLoader()); 106 kernel.invoke(classLoaderServerName, "export", new Object [] {clInfo}, new String [] {ClassLoaderInfo.class.getName()}); 107 } 108 109 protected void tearDown() throws Exception { 110 stop(containerName); 111 stop(connectorName); 112 stop(classLoaderServerName); 113 kernel.shutdown(); 114 } 115 116 private static class MockClassLoaderInfo extends ClassLoader implements ClassLoaderInfo { 117 private final Object id; 118 private final ClassLoader delegate; 119 private URL [] urls; 120 121 private MockClassLoaderInfo(Object id, ClassLoader delegate) { 122 this.id = id; 123 this.delegate = delegate; 124 } 125 126 public InputStream getResourceAsStream(String name) { 127 return delegate.getResourceAsStream(name); 128 } 129 130 public ClassLoader getClassLoader() { 131 return this; 132 } 133 134 public Object getID() { 135 return id; 136 } 137 138 public void setClassLoaderServerURLs(URL [] urls) { 139 this.urls = urls; 140 } 141 } 142 } 143 144 | Popular Tags |