test/hotspot/jtreg/serviceability/sa/TestClassDump.java
author jgeorge
Fri, 01 Dec 2017 18:19:39 +0530
changeset 48181 61a14b5cb1c6
parent 48158 66622fc2e247
child 48424 8749f0b3d227
permissions -rw-r--r--
8191538: SA: tests for clhsdb commands: vmstructsdump, field, symboltable and symbol Summary: Create tests for the clhsdb commands: vmstructsdump, field, symboltable and symbol Reviewed-by: sspitsyn, sballal
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48158
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     1
/*
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     4
 *
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     7
 * published by the Free Software Foundation.
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     8
 *
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    13
 * accompanied this code).
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    14
 *
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    18
 *
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    21
 * questions.
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    22
 */
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    23
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    24
import java.io.IOException;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    25
import java.nio.file.Files;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    26
import java.nio.file.Paths;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    27
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    28
import jdk.test.lib.apps.LingeredApp;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    29
import jdk.test.lib.Platform;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    30
import jdk.test.lib.process.OutputAnalyzer;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    31
import jdk.test.lib.process.ProcessTools;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    32
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    33
/*
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    34
 * @test
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    35
 * @bug 8184982
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    36
 * @summary Test ClassDump tool
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    37
 * @library /test/lib
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    38
 * @run main/othervm TestClassDump
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    39
 */
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    40
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    41
public class TestClassDump {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    42
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    43
    private static void dumpClass(long lingeredAppPid)
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    44
        throws IOException {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    45
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    46
        ProcessBuilder pb;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    47
        OutputAnalyzer output;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    48
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    49
        pb = ProcessTools.createJavaProcessBuilder(
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    50
                "-Dsun.jvm.hotspot.tools.jcore.outputDir=jtreg_classes",
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    51
                "-m", "jdk.hotspot.agent/sun.jvm.hotspot.tools.jcore.ClassDump", String.valueOf(lingeredAppPid));
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    52
        output = new OutputAnalyzer(pb.start());
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    53
        output.shouldHaveExitValue(0);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    54
        if (!Files.isDirectory(Paths.get("jtreg_classes"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    55
            throw new RuntimeException("jtreg_classes directory not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    56
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    57
        if (Files.notExists(Paths.get("jtreg_classes", "java", "lang", "Integer.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    58
            throw new RuntimeException("jtreg_classes/java/lang/Integer.class not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    59
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    60
        if (Files.notExists(Paths.get("jtreg_classes", "jdk", "test", "lib", "apps", "LingeredApp.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    61
            throw new RuntimeException("jtreg_classes/jdk/test/lib/apps/LingeredApp.class not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    62
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    63
        if (Files.notExists(Paths.get("jtreg_classes", "sun", "net", "util", "URLUtil.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    64
            throw new RuntimeException("jtreg_classes/sun/net/util/URLUtil.class not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    65
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    66
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    67
        pb = ProcessTools.createJavaProcessBuilder(
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    68
                "-Dsun.jvm.hotspot.tools.jcore.outputDir=jtreg_classes2",
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    69
                "-Dsun.jvm.hotspot.tools.jcore.PackageNameFilter.pkgList=jdk,sun",
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    70
                "-m", "jdk.hotspot.agent/sun.jvm.hotspot.tools.jcore.ClassDump", String.valueOf(lingeredAppPid));
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    71
        output = new OutputAnalyzer(pb.start());
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    72
        output.shouldHaveExitValue(0);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    73
        if (Files.exists(Paths.get("jtreg_classes2", "java", "math", "BigInteger.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    74
            throw new RuntimeException("jtreg_classes2/java/math/BigInteger.class not expected");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    75
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    76
        if (Files.notExists(Paths.get("jtreg_classes2", "sun", "util", "calendar", "BaseCalendar.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    77
            throw new RuntimeException("jtreg_classes2/sun/util/calendar/BaseCalendar.class not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    78
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    79
        if (Files.notExists(Paths.get("jtreg_classes2", "jdk", "internal", "vm", "PostVMInitHook.class"))) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    80
            throw new RuntimeException("jtreg_classes2/jdk/internal/vm/PostVMInitHook.class not found");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    81
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    82
    }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    83
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    84
    public static void main(String[] args) throws Exception {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    85
        if (!Platform.shouldSAAttach()) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    86
            // Silently skip the test if we don't have enough permissions to attach
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    87
            System.out.println("SA attach not expected to work - test skipped.");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    88
            return;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    89
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    90
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    91
        LingeredApp theApp = null;
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    92
        try {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    93
            theApp = LingeredApp.startApp();
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    94
            long pid = theApp.getPid();
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    95
            System.out.println("Started LingeredApp with pid " + pid);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    96
            dumpClass(pid);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    97
        } catch (Exception ex) {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    98
            throw new RuntimeException("Test ERROR " + ex, ex);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
    99
        } finally {
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
   100
            LingeredApp.stopApp(theApp);
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
   101
        }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
   102
        System.out.println("Test PASSED");
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
   103
    }
66622fc2e247 8184982: SA: Running ClassDump on a simple java program generates NullPointerException
sballal
parents:
diff changeset
   104
}