test/hotspot/jtreg/runtime/Dictionary/ProtectionDomainCacheTest.java
author prr
Thu, 26 Jul 2018 10:00:40 -0700
changeset 51251 0a7a0a6dfa22
parent 48811 58787a1708d2
child 51754 594919232b8f
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48811
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     1
/*
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     4
 *
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     7
 * published by the Free Software Foundation.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     8
 *
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    13
 * accompanied this code).
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    14
 *
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    18
 *
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    21
 * questions.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    22
 */
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    23
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    24
/*
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    25
 * @test
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    26
 * @bug 8151486
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    27
 * @summary Call Class.forName() on the system classloader from a class loaded
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    28
 *          from a custom classloader, using the current class's protection domain.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    29
 * @library /test/jdk/lib/testlibrary
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    30
 * @build jdk.testlibrary.Utils JarUtils
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    31
 * @build ClassForName ProtectionDomainCacheTest
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    32
 * @run main/othervm/policy=test.policy -XX:+UnlockDiagnosticVMOptions -XX:VerifySubSet=dictionary -XX:+VerifyAfterGC -Xlog:gc+verify=debug,protectiondomain=trace,class+unload:gc.log -Djava.security.manager ProtectionDomainCacheTest
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    33
 */
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    34
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    35
import java.net.URL;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    36
import java.net.URLClassLoader;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    37
import java.nio.file.FileSystems;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    38
import java.nio.file.Files;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    39
import java.nio.file.Path;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    40
import java.nio.file.Paths;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    41
import java.util.List;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    42
import jdk.testlibrary.Utils;
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    43
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    44
/*
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    45
 * Create .jar, load ClassForName from .jar using a URLClassLoader
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    46
 */
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    47
public class ProtectionDomainCacheTest {
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    48
    private static final long TIMEOUT = (long)(5000.0 * Utils.TIMEOUT_FACTOR);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    49
    private static final String TESTCLASSES = System.getProperty("test.classes", ".");
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    50
    private static final String CLASSFILENAME = "ClassForName.class";
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    51
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    52
    // Use a new classloader to load the ClassForName class.
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    53
    public static void loadAndRun(Path jarFilePath)
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    54
            throws Exception {
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    55
        ClassLoader classLoader = new URLClassLoader(
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    56
                new URL[]{jarFilePath.toUri().toURL()}) {
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    57
            @Override public String toString() { return "LeakedClassLoader"; }
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    58
        };
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    59
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    60
        Class<?> loadClass = Class.forName("ClassForName", true, classLoader);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    61
        loadClass.newInstance();
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    62
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    63
        System.out.println("returning : " + classLoader);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    64
    }
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    65
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    66
    public static void main(final String[] args) throws Exception {
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    67
        // Create a temporary .jar file containing ClassForName.class
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    68
        Path testClassesDir = Paths.get(TESTCLASSES);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    69
        Path jarFilePath = Files.createTempFile("cfn", ".jar");
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    70
        JarUtils.createJarFile(jarFilePath, testClassesDir, CLASSFILENAME);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    71
        jarFilePath.toFile().deleteOnExit();
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    72
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    73
        // Remove the ClassForName.class file that jtreg built, to make sure
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    74
        // we're loading from the tmp .jar
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    75
        Path classFile = FileSystems.getDefault().getPath(TESTCLASSES,
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    76
                                                          CLASSFILENAME);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    77
        Files.delete(classFile);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    78
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    79
        loadAndRun(jarFilePath);
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    80
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    81
        // Give the GC a chance to unload protection domains
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    82
        for (int i = 0; i < 100; i++) {
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    83
            System.gc();
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    84
        }
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    85
        System.out.println("All Classloaders and protection domain cache entries successfully unloaded");
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    86
    }
58787a1708d2 8175249: VMThread::run fails in VerifyBeforeExit : Universe::verify
coleenp
parents:
diff changeset
    87
}