Author: peter_firmstone
Date: Fri Nov 27 06:17:11 2015
New Revision: 1716798

URL: http://svn.apache.org/viewvc?rev=1716798&view=rev
Log:
The classpath wasn't complete for HTTPD, ensured that all required classes were 
visible on the classpath.  This is a codebase server required by a number of 
tests.

Modified:
    river/jtsk/skunk/qa-refactor-namespace/trunk/qa/jtreg/testlibrary/HTTPD.java

Modified: 
river/jtsk/skunk/qa-refactor-namespace/trunk/qa/jtreg/testlibrary/HTTPD.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa-refactor-namespace/trunk/qa/jtreg/testlibrary/HTTPD.java?rev=1716798&r1=1716797&r2=1716798&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa-refactor-namespace/trunk/qa/jtreg/testlibrary/HTTPD.java 
(original)
+++ 
river/jtsk/skunk/qa-refactor-namespace/trunk/qa/jtreg/testlibrary/HTTPD.java 
Fri Nov 27 06:17:11 2015
@@ -26,12 +26,12 @@ import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.Socket;
 import java.net.SocketPermission;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PermissionCollection;
-import java.security.Permissions;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
@@ -84,7 +84,18 @@ public class HTTPD {
        String jsklibJar = libDir + File.separator + "jsk-lib.jar";
        System.err.println("HTTPD: using " + toolsJar +
                           " on port " + port + " serving " + dir);
-       ClassLoader ld = new Loader0(toolsJar, jsklibJar, port, dir);
+        
+       URLClassLoader ld = new Loader0(toolsJar, jsklibJar, port, dir);
+        StringBuilder sb = new StringBuilder(200);
+        URL[] urls = ld.getURLs();
+        for (int i = 0, l = urls.length; i < l; i++){
+            try {
+                sb.append(urls[i].toURI().toString());
+            } catch (URISyntaxException ex) {
+                System.err.println(HTTPD.class.getName() + ": " + 
ex.getMessage());
+            }
+        }
+        System.err.println("ClassLoader: " + sb.toString());
        try {
            Class cl = Class.forName("HTTPD$Daemon", false, ld);
            Method m = cl.getMethod("create",
@@ -210,7 +221,7 @@ public class HTTPD {
            this.port = port;
            this.dir = dir;
        }
-
+        
        protected PermissionCollection getPermissions(CodeSource cs) {
            PermissionCollection perms = super.getPermissions(cs);
            perms.add(new SocketPermission("localhost:" + port, "listen"));
@@ -225,18 +236,39 @@ public class HTTPD {
      * permission to read toolsJar.
      */
     private static class Loader0 extends Loader {
-       private String toolsJar;
-       private String jsklibJar;
+       private final String toolsJar;
+       private final String jsklibJar;
+        
+        /**
+         * This was added because the test class path wasn't available for this
+         * loader, which meant that Daemon wasn't on the loaders class path,
+         * preventing the test from running.  Not sure why this change was
+         * necessary, whether something has changed in jtreg or Java 8.
+         * 
+         * These tests unfortunately are not run often enough by developers.
+         * 
+         * @return
+         * @throws MalformedURLException 
+         */
+        private static URL[] getPath() throws MalformedURLException{
+            String classpath = TestLibrary.getProperty("test.class.path", 
TestParams.testClasses);
+            String [] cp = classpath.split(File.pathSeparator);
+            int len = cp.length;
+            URL[] path = new URL[len];
+            for (int i = 0; i < len; i++){
+                path[i] = new File(cp[i]).toURI().toURL();
+            }
+            return path;
+        }
 
         Loader0(String toolsJar, String jsklibJar, int port, String dir)
            throws MalformedURLException
        {
-           super(new URL[]{new File(TestParams.testClasses).toURI().toURL()},
-                 port, dir);
+           super(getPath(), port, dir);
            this.toolsJar = toolsJar;
            this.jsklibJar = jsklibJar;
        }
-       
+        
        protected synchronized Class loadClass(String name, boolean resolve)
            throws ClassNotFoundException
        {


Reply via email to