test/hotspot/jtreg/runtime/StackTrace/HiddenFrameTest.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 57958 bfb76c34e5c5
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57938
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     1
/*
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     4
 *
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     7
 * published by the Free Software Foundation.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     8
 *
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    13
 * accompanied this code).
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    14
 *
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    18
 *
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    21
 * questions.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    22
 */
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    23
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    24
/**
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    25
 * @test
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    26
 * @bug 8216977
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    27
 * @summary Test null source file and negative line number from hidden frame produces correct output.
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    28
 * @library /test/lib
57958
bfb76c34e5c5 8230376: [TESTBUG] runtime/StackTrace/HiddenFrameTest.java fails with release VM
jiefu
parents: 57938
diff changeset
    29
 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+ShowHiddenFrames HiddenFrameTest visible
bfb76c34e5c5 8230376: [TESTBUG] runtime/StackTrace/HiddenFrameTest.java fails with release VM
jiefu
parents: 57938
diff changeset
    30
 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:-ShowHiddenFrames HiddenFrameTest hidden
57938
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    31
 */
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    32
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    33
import jdk.test.lib.Asserts;
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    34
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    35
public class HiddenFrameTest {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    36
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    37
    @FunctionalInterface
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    38
    private static interface SomeFunctionalInterface {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    39
        String someMethod(String a, String b);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    40
    }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    41
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    42
    static void assertContains(String expected, String actual, Exception e, boolean framesAreHidden) throws Exception {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    43
        if (!framesAreHidden && !actual.contains(expected)) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    44
            throw new RuntimeException("Expected: " + expected + "; Actual: " + actual, e);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    45
        } else if (framesAreHidden && actual.contains(expected)) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    46
            throw new RuntimeException("Unexpected: " + expected + "; Actual: " + actual, e);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    47
        }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    48
    }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    49
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    50
    static void checkException(Exception e, boolean framesAreHidden) throws Exception {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    51
        StackTraceElement[] fs = e.getStackTrace();
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    52
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    53
        if (fs.length < 2) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    54
            throw new RuntimeException("Exception should have at least two frames", e);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    55
        }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    56
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    57
        assertContains("someMethod(Unknown Source)", fs[0].toString(), e, framesAreHidden);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    58
    }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    59
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    60
    public static void main(String[] args) throws Exception {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    61
        boolean framesAreHidden = false;
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    62
        if (args.length > 0) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    63
            String arg = args[0];
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    64
            if (arg.equals("hidden")) framesAreHidden = true;
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    65
        }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    66
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    67
        try {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    68
            final SomeFunctionalInterface concatter = String::concat;
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    69
            final String nullString = null;
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    70
            if (concatter != null) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    71
                // This throws NPE from the lambda expression which is a hidden frame
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    72
                concatter.someMethod(nullString, "validString");
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    73
            }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    74
        } catch (NullPointerException e) {
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    75
            e.printStackTrace();
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    76
            checkException(e, framesAreHidden);
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    77
        }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    78
    }
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    79
}
8ec5ad4f5cc3 8216977: ShowHiddenFrames use in java_lang_StackTraceElement::fill_in appears broken
coleenp
parents:
diff changeset
    80