test/jdk/jdk/jfr/event/runtime/TestShutdownEvent.java
author mbaesken
Fri, 09 Aug 2019 15:39:32 +0200
changeset 57712 145300cc8ea6
parent 53559 1ae0b76bb5df
permissions -rw-r--r--
8219082: jdk/jfr/event/runtime/TestShutdownEvent.java failed in validateStackTrace() Reviewed-by: mdoerr, mseledtsov
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     1
/*
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     4
 *
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    10
 *
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    15
 * accompanied this code).
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    16
 *
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    20
 *
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    23
 * questions.
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    24
 */
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    25
package jdk.jfr.event.runtime;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    26
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    27
import java.io.IOException;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    28
import java.lang.reflect.Field;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    29
import java.nio.file.Paths;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    30
import java.util.Comparator;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    31
import java.util.List;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    32
import java.util.stream.Collectors;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    33
53477
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
    34
import jdk.internal.misc.Unsafe;
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    35
import jdk.jfr.consumer.RecordedEvent;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    36
import jdk.jfr.consumer.RecordedFrame;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    37
import jdk.jfr.consumer.RecordedStackTrace;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    38
import jdk.jfr.consumer.RecordingFile;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    39
import jdk.test.lib.Asserts;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    40
import jdk.test.lib.Platform;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    41
import jdk.test.lib.process.OutputAnalyzer;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    42
import jdk.test.lib.process.ProcessTools;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    43
import jdk.test.lib.jfr.EventNames;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    44
import jdk.test.lib.jfr.Events;
53477
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
    45
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    46
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    47
/**
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    48
 * @test
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    49
 * @summary Test Shutdown event
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    50
 * @key jfr
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    51
 * @requires vm.hasJFR
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    52
 * @library /test/lib
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    53
 * @modules jdk.jfr
53477
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
    54
 *          java.base/jdk.internal.misc
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
    55
 * @run main/othervm jdk.jfr.event.runtime.TestShutdownEvent
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    56
 */
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    57
public class TestShutdownEvent {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    58
    private static ShutdownEventSubTest subTests[] = {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    59
             new TestLastNonDaemon(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    60
             new TestSystemExit(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    61
             new TestVMCrash(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    62
             new TestUnhandledException(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    63
             new TestRuntimeHalt(),
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
    64
             new TestSig("TERM"),
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
    65
             new TestSig("HUP"),
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
    66
             new TestSig("INT")
53481
d02f1f4ff3a6 8217748: [TESTBUG] Exclude TestSig test case from JFR TestShutdownEvent
mseledtsov
parents: 53477
diff changeset
    67
    };
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    68
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    69
    public static void main(String[] args) throws Throwable {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    70
        for (int i = 0; i < subTests.length; ++i) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    71
            if (subTests[i].isApplicable()) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    72
                runSubtest(i);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    73
            } else {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    74
                System.out.println("Skipping non-applicable test: " + i);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    75
            }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    76
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    77
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    78
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    79
    private static void runSubtest(int subTestIndex) throws Exception {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    80
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    81
                                "-Xlog:jfr=debug",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    82
                                "-XX:-CreateCoredumpOnCrash",
53477
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
    83
                                "--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    84
                                "-XX:StartFlightRecording=filename=./dumped.jfr,dumponexit=true,settings=default",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    85
                                "jdk.jfr.event.runtime.TestShutdownEvent$TestMain",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    86
                                String.valueOf(subTestIndex));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    87
        OutputAnalyzer output = ProcessTools.executeProcess(pb);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    88
        System.out.println(output.getOutput());
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
    89
        int exitCode = output.getExitValue();
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
    90
        System.out.println("Exit code: " + exitCode);
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    91
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    92
        String recordingName = output.firstMatch("emergency jfr file: (.*.jfr)", 1);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    93
        if (recordingName == null) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    94
            recordingName = "./dumped.jfr";
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    95
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    96
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    97
        List<RecordedEvent> events = RecordingFile.readAllEvents(Paths.get(recordingName));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    98
        List<RecordedEvent> filteredEvents = events.stream()
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    99
            .filter(e -> e.getEventType().getName().equals(EventNames.Shutdown))
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   100
            .sorted(Comparator.comparing(RecordedEvent::getStartTime))
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   101
            .collect(Collectors.toList());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   102
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   103
        Asserts.assertEquals(filteredEvents.size(), 1);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   104
        RecordedEvent event = filteredEvents.get(0);
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   105
        subTests[subTestIndex].verifyEvents(event, exitCode);
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   106
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   107
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   108
    @SuppressWarnings("unused")
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   109
    private static class TestMain {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   110
        public static void main(String[] args) throws Exception {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   111
            ShutdownEventSubTest subTest = subTests[Integer.parseInt(args[0])];
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   112
            System.out.println("Running subtest " + args[0] + " (" + subTest.getClass().getName() + ")");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   113
            subTest.runTest();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   114
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   115
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   116
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   117
    private interface ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   118
        default boolean isApplicable() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   119
            return true;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   120
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   121
        void runTest();
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   122
        void verifyEvents(RecordedEvent event, int exitCode);
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   123
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   124
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   125
    // Basic stack trace validation, checking that the runTest method is part of the stack
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   126
    static void validateStackTrace(RecordedStackTrace stackTrace) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   127
        List<RecordedFrame> frames = stackTrace.getFrames();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   128
        Asserts.assertFalse(frames.isEmpty());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   129
        Asserts.assertTrue(frames.stream()
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   130
                           .anyMatch(t -> t.getMethod().getName().equals("runTest")));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   131
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   132
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   133
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   134
    // =========================================================================
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   135
    private static class TestLastNonDaemon implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   136
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   137
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   138
            // Do nothing - this is the default exit reason
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   139
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   140
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   141
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   142
        public void verifyEvents(RecordedEvent event, int exitCode) {
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   143
            Events.assertField(event, "reason").equal("No remaining non-daemon Java threads");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   144
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   145
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   146
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   147
    private static class TestSystemExit implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   148
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   149
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   150
            System.out.println("Running System.exit");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   151
            System.exit(42);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   152
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   153
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   154
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   155
        public void verifyEvents(RecordedEvent event, int exitCode) {
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   156
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   157
            validateStackTrace(event.getStackTrace());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   158
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   159
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   160
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   161
    private static class TestVMCrash implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   162
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   163
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   164
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   165
            System.out.println("Attempting to crash");
53477
8f785877c008 8217345: [TESTBUG] JFR TestShutdownEvent fails due to improper use of Unsafe
mseledtsov
parents: 53365
diff changeset
   166
            Unsafe.getUnsafe().putInt(0L, 0);
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   167
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   168
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   169
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   170
        public void verifyEvents(RecordedEvent event, int exitCode) {
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   171
            Events.assertField(event, "reason").equal("VM Error");
57712
145300cc8ea6 8219082: jdk/jfr/event/runtime/TestShutdownEvent.java failed in validateStackTrace()
mbaesken
parents: 53559
diff changeset
   172
            // for now avoid validating the stack trace, in case of compiled code
145300cc8ea6 8219082: jdk/jfr/event/runtime/TestShutdownEvent.java failed in validateStackTrace()
mbaesken
parents: 53559
diff changeset
   173
            // the vframeStream based solution will not work in this special VMCrash case
145300cc8ea6 8219082: jdk/jfr/event/runtime/TestShutdownEvent.java failed in validateStackTrace()
mbaesken
parents: 53559
diff changeset
   174
            // see 8219082 for details (running the crashed VM with -Xint would solve the issue too)
145300cc8ea6 8219082: jdk/jfr/event/runtime/TestShutdownEvent.java failed in validateStackTrace()
mbaesken
parents: 53559
diff changeset
   175
            //validateStackTrace(event.getStackTrace());
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   176
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   177
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   178
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   179
    private static class TestUnhandledException implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   180
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   181
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   182
            throw new RuntimeException("Unhandled");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   183
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   184
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   185
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   186
        public void verifyEvents(RecordedEvent event, int exitCode) {
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   187
            Events.assertField(event, "reason").equal("No remaining non-daemon Java threads");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   188
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   189
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   190
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   191
    private static class TestRuntimeHalt implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   192
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   193
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   194
            System.out.println("Running Runtime.getRuntime.halt");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   195
            Runtime.getRuntime().halt(17);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   196
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   197
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   198
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   199
        public void verifyEvents(RecordedEvent event, int exitCode) {
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   200
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   201
            validateStackTrace(event.getStackTrace());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   202
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   203
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   204
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   205
    private static class TestSig implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   206
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   207
        private final String signalName;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   208
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   209
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   210
        public boolean isApplicable() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   211
            if (Platform.isWindows()) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   212
                return false;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   213
            }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   214
            if (signalName.equals("HUP") && Platform.isSolaris()) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   215
                return false;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   216
            }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   217
            return true;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   218
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   219
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   220
        public TestSig(String signalName) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   221
            this.signalName = signalName;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   222
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   223
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   224
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   225
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   226
            System.out.println("Sending SIG" + signalName + " to process " + ProcessHandle.current().pid());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   227
            try {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   228
                Runtime.getRuntime().exec("kill -" + signalName + " " + ProcessHandle.current().pid()).waitFor();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   229
                Thread.sleep(60_1000);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   230
            } catch (InterruptedException e) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   231
                e.printStackTrace();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   232
            } catch (IOException e) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   233
                e.printStackTrace();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   234
            }
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   235
            System.out.println("Process survived the SIG" + signalName + " signal!");
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   236
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   237
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   238
        @Override
53559
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   239
        public void verifyEvents(RecordedEvent event, int exitCode) {
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   240
            if (exitCode == 0) {
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   241
                System.out.println("Process exited normally with exit code 0, skipping the verification");
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   242
                return;
1ae0b76bb5df 8217744: [TESTBUG] JFR TestShutdownEvent fails on some systems due to process surviving SIGINT
mseledtsov
parents: 53481
diff changeset
   243
            }
53365
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   244
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   245
            Events.assertEventThread(event);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   246
            Asserts.assertEquals(event.getThread().getJavaName(), "SIG" + signalName + " handler");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   247
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   248
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   249
}