1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.MalformedURLException; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URL; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLClassLoader; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLStreamHandler; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLStreamHandlerFactory; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.NoSuchElementException; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.StringTokenizer; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Vector; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.Attributes; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.JarFile; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.JarOutputStream; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.Manifest; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Configuration; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Jetty; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class URLClassLoaderTest extends TestCase { 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String PREFIX = "http://localhost:"; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String ROOT = "resources/net.resources/HTTP/html/testres231"; 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static String serverURL = null; 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl; 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int port = 0; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes port = Support_Jetty.startHttpServerWithDocRoot(ROOT); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Exception during setup jetty : " + e.getMessage()); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverURL = PREFIX + port + "/"; 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class BogusClassLoader extends ClassLoader { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public URL getResource(String res) { 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new URL("http://test/BogusClassLoader"); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (MalformedURLException e) { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public class URLClassLoaderExt extends URLClassLoader { 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public URLClassLoaderExt(URL[] urls) { 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(urls); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Class<?> findClass(String cl) throws ClassNotFoundException { 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.findClass(cl); 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#URLClassLoader(java.net.URL[]) 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor$Ljava_net_URL() throws Exception { 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] u = new URL[0]; 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(u); 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(ucl); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("Failed to set parent", URLClassLoader 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getSystemClassLoader(), ucl.getParent()); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader loader = new URLClassLoader(new URL[] { null }); 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("test", false, loader); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#URLClassLoader(java.net.URL[], 1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath *java.lang.ClassLoader) 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor$Ljava_net_URLLjava_lang_ClassLoader() { 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassLoader cl = new BogusClassLoader(); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] u = new URL[0]; 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(u, cl); 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL res = ucl.getResource("J"); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(res); 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to set parent", "/BogusClassLoader", res.getFile()); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#findResources(java.lang.String) 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_findResourcesLjava_lang_String() throws IOException { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] resValues = { "This is a test resource file.", 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "This is a resource from a subdir" }; 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[2]; 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL(serverURL); 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[1] = new URL(serverURL + "/subdir1/"); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(urls); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Enumeration res = ucl.findResources("RESOURCE.TXT"); 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to locate resources", res); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int i = 0; 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (res.hasMoreElements()) { 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StringBuffer sb = new StringBuffer(); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream is = ((URL) res.nextElement()).openStream(); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int c; 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while ((c = is.read()) != -1) { 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append((char) c); 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect resource/or in wrong order", 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resValues[i++], sb.toString()); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrect number of resources returned: " + i, 2, i); 1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-6510 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes res = ucl.findResources(null); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(res); 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(res.hasMoreElements()); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#getURLs() 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getURLs() throws MalformedURLException { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[4]; 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("http://" + Support_Configuration.HomeAddress); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[1] = new URL("http://" + Support_Configuration.TestResources + "/"); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[2] = new URL("ftp://" + Support_Configuration.TestResources + "/"); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[3] = new URL("jar:file:c://" + Support_Configuration.TestResources 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "!/"); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(urls); 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] ucUrls = ucl.getURLs(); 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < urls.length; i++) { 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect URL[]", urls[i], ucUrls[i]); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#newInstance(java.net.URL[]) 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_newInstance$Ljava_net_URL() throws MalformedURLException, 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassNotFoundException { 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Verify that loaded class' have correct permissions 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[1]; 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL(serverURL + "/UCL/UCL.jar"); 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class cl = ucl.loadClass("ucl.ResClass"); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL res = cl.getClassLoader().getResource("XX.class"); 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to load class", cl); 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull( 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Loaded class unable to access resource from same codeSource", 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes res); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes cl = null; 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("jar:" + serverURL + "/UCL/UCL.jar!/"); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes cl = ucl.loadClass("ucl.ResClass"); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to load class from explicit jar URL", cl); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#newInstance(java.net.URL[], 1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath *java.lang.ClassLoader) 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_newInstance$Ljava_net_URLLjava_lang_ClassLoader() { 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassLoader cl = new BogusClassLoader(); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] u = new URL[0]; 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(u, cl); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL res = ucl.getResource("J"); 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(res); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to set parent", "/BogusClassLoader", res.getFile()); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#URLClassLoader(java.net.URL[], 2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath *java.lang.ClassLoader, java.net.URLStreamHandlerFactory) 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor$Ljava_net_URLLjava_lang_ClassLoaderLjava_net_URLStreamHandlerFactory() { 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class TestFactory implements URLStreamHandlerFactory { 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public URLStreamHandler createURLStreamHandler(String protocol) { 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClassLoader cl = new BogusClassLoader(); 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] u = new URL[0]; 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(u, cl, new TestFactory()); 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL res = ucl.getResource("J"); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(res); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to set parent", "/BogusClassLoader", res.getFile()); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws ClassNotFoundException 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws IOException 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#findClass(java.lang.String) 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_findClassLjava_lang_String() 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws ClassNotFoundException, IOException { 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File resources = Support_Resources.createTempFolder(); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String resPath = resources.toString(); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') { 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resPath = resPath.substring(1); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_11.jar"); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_12.jar"); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_13.jar"); 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_14.jar"); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[1]; 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/hyts_11.jar"); 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl = URLClassLoader.newInstance(urls, null); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL resURL = ucl.findResource("Test.txt"); 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL reference = new URL("jar:file:/" + resPath.replace('\\', '/') 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "/JarIndex/hyts_14.jar!/Test.txt"); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Resource not found: " + resURL + " ref: " + reference, 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes reference, resURL); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(Class.forName("cpack.CNothing", true, ucl)); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_21.jar"); 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_22.jar"); 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_23.jar"); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/hyts_21.jar"); 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls, null); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Enumeration en = ucl.findResources("bpack/"); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean resourcesFound; 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = true; 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL url1 = (URL) en.nextElement(); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL url2 = (URL) en.nextElement(); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = resourcesFound 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && url1.equals(new URL("jar:file:/" 2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + resPath.replace('\\', '/') 2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "/JarIndex/hyts_22.jar!/bpack/")); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = resourcesFound 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && url2.equals(new URL("jar:file:/" 2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + resPath.replace('\\', '/') 2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "/JarIndex/hyts_23.jar!/bpack/")); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (en.hasMoreElements()) { 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = false; 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchElementException e) { 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = false; 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Resources not found (1)", resourcesFound); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(Class.forName("bpack.Homer", true, ucl)); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("bpack.Bart", true, ucl); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw ClassNotFoundException"); 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassNotFoundException e) { 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("Main4", true, ucl); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw ClassNotFoundException"); 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassNotFoundException e) { 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_22-new.jar"); 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/hyts_22-new.jar"); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls, null); 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Cannot find resource", ucl.findResource("cpack/")); 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_11.jar"); 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/hyts_31.jar"); 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls, null); 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("cpack.Mock", true, ucl); 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw ClassNotFoundException"); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassNotFoundException e) { 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // testing circular reference 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_41.jar"); 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_42.jar"); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/hyts_41.jar"); 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls, null); 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes en = ucl.findResources("bpack/"); 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resourcesFound = resourcesFound 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && ((URL) en.nextElement()).equals(new URL("jar:file:/" 3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + resPath.replace('\\', '/') 3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "/JarIndex/hyts_42.jar!/bpack/")); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Resources not found (2)", resourcesFound); 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("No more resources expected", en.hasMoreElements()); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-2357. 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoaderExt cl = new URLClassLoaderExt(new URL[557]); 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes cl.findClass("0"); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw NullPointerException"); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException npe) { 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-2871. 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader cl = new URLClassLoader(new URL[] { new URL( 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "file:/foo.jar") }); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("foo.Foo", false, cl); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception ex) { 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Ignored 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Class.forName("foo.Foo", false, cl); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw ClassNotFoundException"); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ClassNotFoundException cnfe) { 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#findResource(java.lang.String) 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_findResourceLjava_lang_String() 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws MalformedURLException { 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[2]; 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL(serverURL); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[1] = new URL(serverURL); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = new URLClassLoader(urls); 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL res = ucl.findResource("RESOURCE.TXT"); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to locate resource", res); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StringBuffer sb = new StringBuffer(); 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes java.io.InputStream is = res.openStream(); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int c; 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while ((c = is.read()) != -1) { 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append((char) c); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes is.close(); 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect resource", !sb.toString().equals( 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "This is a test resource file")); 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFindResource_H3461() throws Exception { 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File userDir = new File(System.getProperty("user.dir")); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dir = new File(userDir, "encode#me"); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File f, f2; 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader loader; 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL dirUrl; 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!dir.exists()) { 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dir.mkdir(); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dir.deleteOnExit(); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dirUrl = dir.toURI().toURL(); 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes loader = new URLClassLoader(new URL[] { dirUrl }); 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes f = File.createTempFile("temp", ".dat", dir); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes f.deleteOnExit(); 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes f2 = File.createTempFile("bad#name#", ".dat", dir); 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes f2.deleteOnExit(); 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull( 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Unable to load resource from path with problematic name", 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes loader.getResource(f.getName())); 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("URL was not correctly encoded", f2.toURI().toURL(), 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes loader.getResource(f2.getName())); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_findResource() throws Exception { 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File resources = Support_Resources.createTempFolder(); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String resPath = resources.toString(); 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (resPath.charAt(0) == '/' || resPath.charAt(0) == ' ') { 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resPath = resPath.substring(1); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_21.jar"); 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_22.jar"); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_23.jar"); 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader urlClassloader = URLClassLoader.newInstance( 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new URL[] { new URL("file:/" + resPath 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "/JarIndex/hyts_21.jar") }, null); 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Enumeration en = urlClassloader.findResources("bpack/"); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(en.hasMoreElements()); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL expected = new URL("jar:file:/" + resPath.replace('\\', '/') 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "/JarIndex/hyts_22.jar!/bpack/"); 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(expected, (URL) en.nextElement()); 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(expected, urlClassloader.findResource("bpack/")); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.URLClassLoader#getResource(java.lang.String) 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getResourceLjava_lang_String() 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws MalformedURLException { 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL url1 = new URL("file:///"); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader loader = new URLClassLoader(new URL[] { url1 }, null); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long start = System.currentTimeMillis(); 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try without the leading / 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL result = loader.getResource("dir1/file1"); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long end = System.currentTimeMillis(); 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long time = end - start; 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (time < 100) { 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes time = 100; 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes start = System.currentTimeMillis(); 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try with the leading forward slash 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = loader.getResource("/dir1/file1"); 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes end = System.currentTimeMillis(); 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long uncTime = end - start; 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("too long. UNC path formed? UNC time: " + uncTime 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + " regular time: " + time, uncTime <= (time * 4)); 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression for Harmony-2237 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getResource() throws Exception { 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader urlLoader = getURLClassLoader(); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(urlLoader.findResource("XXX")); //$NON-NLS-1$ 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static URLClassLoader getURLClassLoader() { 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String classPath = System.getProperty("java.class.path"); 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StringTokenizer tok = new StringTokenizer(classPath, File.pathSeparator); 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Vector<URL> urlVec = new Vector<URL>(); 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String resPackage = Support_Resources.RESOURCE_PACKAGE; 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (tok.hasMoreTokens()) { 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String path = tok.nextToken(); 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String url; 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (new File(path).isDirectory()) 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes url = "file:" + path + resPackage + "subfolder/"; 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes else 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes url = "jar:file:" + path + "!" + resPackage + "subfolder/"; 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urlVec.addElement(new URL(url)); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (MalformedURLException e) { 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // do nothing 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[urlVec.size()]; 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < urlVec.size(); i++) { 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[i] = urlVec.elementAt(i); 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader loader = new URLClassLoader(urls, null); 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return loader; 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression test for HARMONY-2255 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getResourceAsStream() { 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream in = this.getClass() 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getResourceAsStream("test%.properties"); 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(in); 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in = this.getClass().getResourceAsStream("test%25.properties"); 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(in); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 4908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression test for HARMONY-6074 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 4948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void test_findClassLjava_lang_String_Jar_Class_Path() throws Exception { 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File resources = Support_Resources.createTempFolder(); 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String resPath = resources.toString(); 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') { 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resPath = resPath.substring(1); 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 5008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_11.jar"); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "JarIndex", "hyts_13.jar"); 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarFile jarFile = new JarFile(resources.getAbsolutePath() + "/JarIndex/hyts_11.jar"); 5058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Manifest mf = jarFile.getManifest(); 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Attributes attrs = mf.getMainAttributes(); 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes attrs.putValue("Class-Path", "file:/" + resPath + "/JarIndex/hyts_13.jar"); 5088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File mainJar = new File(resources.getAbsolutePath() + "/JarIndex/main.jar"); 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarOutputStream jos = new JarOutputStream(new FileOutputStream(mainJar), mf); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jos.flush(); 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jos.close(); 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(mainJar.exists()); 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL[] urls = new URL[1]; 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urls[0] = new URL("file:/" + resPath + "/JarIndex/main.jar"); 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl = URLClassLoader.newInstance(urls, null); 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(Class.forName("Main2", true, ucl)); 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 522