test/jdk/java/net/URLClassLoader/closetest/CloseTest.java
author aefimov
Thu, 08 Aug 2019 21:58:11 +0100
changeset 57686 70f5cbb711a9
parent 54314 46cf212cdcca
permissions -rw-r--r--
8225430: Replace wildcard address with loopback or local host in tests - part 14 Reviewed-by: dfuchs, chegar, vtewari
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     1
/*
57686
70f5cbb711a9 8225430: Replace wildcard address with loopback or local host in tests - part 14
aefimov
parents: 54314
diff changeset
     2
 * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     4
 *
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     7
 * published by the Free Software Foundation.
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     8
 *
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    13
 * accompanied this code).
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    14
 *
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5152
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5152
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5152
diff changeset
    21
 * questions.
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    22
 */
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    23
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    24
/*
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    25
 * @test
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    26
 * @bug 4167874
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    27
 * @modules java.logging
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    28
 *          jdk.httpserver
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    29
 *          jdk.compiler
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    30
 * @library ../../../../com/sun/net/httpserver
45290
51bbbe0b42b4 8181307: tests added/changed by 8166139 should be updated to use the latest testlibrary
iignatyev
parents: 45285
diff changeset
    31
 *          /test/lib
45467
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    32
 * @build jdk.test.lib.compiler.CompilerUtils
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    33
 *        jdk.test.lib.util.FileUtils
51977
a8862960c19f 8211171: move JarUtils to top-level testlibrary
iignatyev
parents: 47216
diff changeset
    34
 *        jdk.test.lib.util.JarUtils
45467
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    35
 *        jdk.test.lib.Platform
51977
a8862960c19f 8211171: move JarUtils to top-level testlibrary
iignatyev
parents: 47216
diff changeset
    36
 *        FileServerHandler
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    37
 * @run main/othervm CloseTest
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    38
 * @summary URL-downloaded jar files can consume all available file descriptors
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    39
 */
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    40
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    41
import java.io.File;
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    42
import java.io.IOException;
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    43
import java.lang.reflect.Method;
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    44
import java.net.URLClassLoader;
54314
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
    45
import java.net.InetAddress;
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    46
import java.net.InetSocketAddress;
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    47
import java.net.URL;
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    48
import java.nio.file.Files;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    49
import java.nio.file.Path;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    50
import java.nio.file.Paths;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    51
45393
de4e1efc8eec 8181335: remove packageless CompilerUtils
iignatyev
parents: 45290
diff changeset
    52
import jdk.test.lib.compiler.CompilerUtils;
54314
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
    53
import jdk.test.lib.net.URIBuilder;
51977
a8862960c19f 8211171: move JarUtils to top-level testlibrary
iignatyev
parents: 47216
diff changeset
    54
import jdk.test.lib.util.JarUtils;
45393
de4e1efc8eec 8181335: remove packageless CompilerUtils
iignatyev
parents: 45290
diff changeset
    55
42764
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    56
import com.sun.net.httpserver.HttpContext;
5f368ec0cbb4 8170864: java/net/URLClassLoader/closetest/CloseTest.java has undeclared dependencies
skovalev
parents: 38883
diff changeset
    57
import com.sun.net.httpserver.HttpServer;
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    58
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    59
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    60
7983
fb83b663cadc 6829919: URLClassLoader.close() doesn't close resource file if getResourceAsStream(...) was called before
michaelm
parents: 7668
diff changeset
    61
public class CloseTest extends Common {
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    62
    private static final String WORK_DIR = System.getProperty("user.dir")
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    63
            + "/";
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    64
//
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    65
// needs two jar files test1.jar and test2.jar with following structure
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    66
//
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    67
// com/foo/TestClass
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    68
// com/foo/TestClass1
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    69
// com/foo/Resource1
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    70
// com/foo/Resource2
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    71
//
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    72
// and a directory hierarchy with the same structure/contents
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    73
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    74
    public static void main(String args[]) throws Exception {
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    75
        setup();
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    76
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    77
        startHttpServer(WORK_DIR + "serverRoot/");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    78
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    79
        String testjar = WORK_DIR + "test.jar";
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    80
        copyFile(WORK_DIR + "test1.jar", testjar);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    81
        test(testjar, 1);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    82
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    83
        // repeat test with different implementation
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    84
        // of test.jar (whose TestClass.getValue() returns 2
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    85
        copyFile(WORK_DIR + "test2.jar", testjar);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    86
        test(testjar, 2);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    87
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    88
        // repeat test using a directory of files
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    89
        String testdir = WORK_DIR + "testdir/";
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    90
        rm_minus_rf(new File(testdir));
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    91
        copyDir(WORK_DIR + "test1/", testdir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    92
        test(testdir, 1);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    93
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    94
        testdir = WORK_DIR + "testdir/";
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    95
        rm_minus_rf(new File(testdir));
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    96
        copyDir(WORK_DIR + "test2/", testdir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    97
        test(testdir, 2);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
    98
        getHttpServer().stop(3);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
    99
    }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   100
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   101
    // create a loader on jarfile (or directory), plus a http loader
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   102
    // load a class , then look for a resource
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   103
    // also load a class from http loader
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   104
    // then close the loader
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   105
    // check further new classes/resources cannot be loaded
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   106
    // check jar (or dir) can be deleted
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   107
    // check existing classes can be loaded
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   108
    // check boot classes can be loaded
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   109
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   110
    static void test(String name, int expectedValue) throws Exception {
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   111
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   112
        URL url = new URL("file", null, name);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   113
        URL url2 = getServerURL();
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   114
        System.out.println("Doing tests with URL: " + url + " and " + url2);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   115
        URL[] urls = new URL[2];
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   116
        urls[0] = url;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   117
        urls[1] = url2;
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   118
        URLClassLoader loader = new URLClassLoader(urls);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   119
        Class testclass = loadClass("com.foo.TestClass", loader, true);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   120
        Class class2 = loadClass("Test", loader, true); // from http
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   121
        class2.newInstance();
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   122
        Object test = testclass.newInstance();
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   123
        Method method = testclass.getDeclaredMethods()[0]; // int getValue();
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   124
        int res = (Integer) method.invoke(test);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   125
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   126
        if (res != expectedValue) {
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   127
            throw new RuntimeException("wrong value from getValue() [" + res +
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   128
                    "/" + expectedValue + "]");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   129
        }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   130
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   131
        // should find /resource1
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   132
        URL u1 = loader.findResource("com/foo/Resource1");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   133
        if (u1 == null) {
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   134
            throw new RuntimeException("can't find com/foo/Resource1 in test1.jar");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   135
        }
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   136
        loader.close();
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   137
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   138
        // should NOT find /resource2 even though it is in jar
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   139
        URL u2 = loader.findResource("com/foo/Resource2");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   140
        if (u2 != null) {
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   141
            throw new RuntimeException("com/foo/Resource2 unexpected in test1.jar");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   142
        }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   143
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   144
        // load tests
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   145
        loadClass("com.foo.TestClass1", loader, false);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   146
        loadClass("com.foo.TestClass", loader, true);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   147
        loadClass("java.util.ArrayList", loader, true);
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   148
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   149
        // now check we can delete the path
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   150
        rm_minus_rf(new File(name));
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   151
        System.out.println(" ... OK");
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   152
    }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   153
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   154
    static HttpServer httpServer;
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   155
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   156
    static HttpServer getHttpServer() {
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   157
        return httpServer;
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   158
    }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   159
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   160
    static URL getServerURL() throws Exception {
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   161
        int port = httpServer.getAddress().getPort();
54314
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   162
        return URIBuilder.newBuilder()
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   163
            .scheme("http")
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   164
            .loopback()
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   165
            .port(port)
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   166
            .path("/")
46cf212cdcca 8220575: Replace hardcoded 127.0.0.1 in URLs with new URI builder
aeubanks
parents: 51977
diff changeset
   167
            .toURL();
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   168
    }
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   169
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   170
    static void startHttpServer(String docroot) throws Exception {
57686
70f5cbb711a9 8225430: Replace wildcard address with loopback or local host in tests - part 14
aefimov
parents: 54314
diff changeset
   171
        httpServer = HttpServer.create(
70f5cbb711a9 8225430: Replace wildcard address with loopback or local host in tests - part 14
aefimov
parents: 54314
diff changeset
   172
                new InetSocketAddress(InetAddress.getLoopbackAddress(), 0),
70f5cbb711a9 8225430: Replace wildcard address with loopback or local host in tests - part 14
aefimov
parents: 54314
diff changeset
   173
                10);
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   174
        HttpContext ctx = httpServer.createContext(
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   175
                "/", new FileServerHandler(docroot)
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   176
        );
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   177
        httpServer.start();
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   178
    }
45285
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   179
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   180
    /**
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   181
     * Prepare jars files for the tests
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   182
     */
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   183
    private static void setup () throws IOException {
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   184
        String[] tests = new String[]{"test1", "test2"};
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   185
        Path workDir = Paths.get(WORK_DIR);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   186
        Path testSrc = Paths.get(System.getProperty("test.src"));
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   187
        for (String test : tests) {
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   188
            Path testSrcDir =  testSrc.resolve(test);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   189
            Path testTargetDir = workDir.resolve(test);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   190
            // Compile sources for corresponding test
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   191
            CompilerUtils.compile(testSrcDir, testTargetDir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   192
            // Copy all resources
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   193
            Path packages = Paths.get("com", "foo");
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   194
            Path copySrcDir = testSrcDir.resolve(packages);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   195
            Path copyTargetDir = testTargetDir.resolve(packages);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   196
            Files.createDirectories(copyTargetDir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   197
            Path res1 = Paths.get("Resource1");
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   198
            Path res2 = Paths.get("Resource2");
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   199
            Files.copy(copySrcDir.resolve(res1), copyTargetDir.resolve(res1),
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   200
                       REPLACE_EXISTING);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   201
            Files.copy(copySrcDir.resolve(res2), copyTargetDir.resolve(res2),
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   202
                       REPLACE_EXISTING);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   203
            // Create jar
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   204
            JarUtils.createJarFile(workDir.resolve(test + ".jar"), testTargetDir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   205
        }
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   206
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   207
        // Copy and compile server test class
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   208
        Path serverRoot = Paths.get("serverRoot");
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   209
        Path targetDir = workDir.resolve(serverRoot);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   210
        Path file = Paths.get("Test.java");
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   211
        Files.createDirectories(targetDir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   212
        Files.copy(testSrc.resolve(serverRoot).resolve(file),
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   213
                   targetDir.resolve(file), REPLACE_EXISTING);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   214
        CompilerUtils.compile(targetDir, targetDir);
7f8db2139152 8166139: Refactor java/net shell cases to java
xiaofeya
parents: 42764
diff changeset
   215
    }
1940
e81514210873 4167874: URL-downloaded jar files can consume all available file descriptors
michaelm
parents:
diff changeset
   216
}