test/jdk/jdk/jfr/event/runtime/TestShutdownEvent.java
author mseledtsov
Wed, 16 Jan 2019 17:37:05 -0800
changeset 53365 a678ba2556ee
child 53477 8f785877c008
permissions -rw-r--r--
8213917: [TESTBUG] Shutdown JFR event is not covered by test Summary: updated the test Reviewed-by: egahlin
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
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    34
import jdk.jfr.consumer.RecordedEvent;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    35
import jdk.jfr.consumer.RecordedFrame;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    36
import jdk.jfr.consumer.RecordedStackTrace;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    37
import jdk.jfr.consumer.RecordingFile;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    38
import jdk.test.lib.Asserts;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    39
import jdk.test.lib.Platform;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    40
import jdk.test.lib.process.OutputAnalyzer;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    41
import jdk.test.lib.process.ProcessTools;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    42
import jdk.test.lib.jfr.EventNames;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    43
import jdk.test.lib.jfr.Events;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    44
import sun.misc.Unsafe;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    45
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
 * @test
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    48
 * @summary Test Shutdown event
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    49
 * @key jfr
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    50
 * @requires vm.hasJFR
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    51
 * @library /test/lib
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    52
 * @modules jdk.jfr
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    53
 * @run main jdk.jfr.event.runtime.TestShutdownEvent
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    54
 */
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    55
public class TestShutdownEvent {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    56
    private static ShutdownEventSubTest subTests[] = {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    57
             new TestLastNonDaemon(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    58
             new TestSystemExit(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    59
             new TestVMCrash(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    60
             new TestUnhandledException(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    61
             new TestRuntimeHalt(),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    62
             new TestSig("TERM"),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    63
             new TestSig("HUP"),
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    64
             new TestSig("INT")};
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    65
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    66
    public static void main(String[] args) throws Throwable {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    67
        for (int i = 0; i < subTests.length; ++i) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    68
            if (subTests[i].isApplicable()) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    69
                runSubtest(i);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    70
            } else {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    71
                System.out.println("Skipping non-applicable test: " + i);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    72
            }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    73
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    74
    }
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
    private static void runSubtest(int subTestIndex) throws Exception {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    77
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    78
                                "-Xlog:jfr=debug",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    79
                                "-XX:-CreateCoredumpOnCrash",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    80
                                "-XX:StartFlightRecording=filename=./dumped.jfr,dumponexit=true,settings=default",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    81
                                "jdk.jfr.event.runtime.TestShutdownEvent$TestMain",
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    82
                                String.valueOf(subTestIndex));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    83
        OutputAnalyzer output = ProcessTools.executeProcess(pb);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    84
        System.out.println(output.getOutput());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    85
        System.out.println("Exit code: " + output.getExitValue());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    86
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    87
        String recordingName = output.firstMatch("emergency jfr file: (.*.jfr)", 1);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    88
        if (recordingName == null) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    89
            recordingName = "./dumped.jfr";
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    90
        }
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
        List<RecordedEvent> events = RecordingFile.readAllEvents(Paths.get(recordingName));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    93
        List<RecordedEvent> filteredEvents = events.stream()
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    94
            .filter(e -> e.getEventType().getName().equals(EventNames.Shutdown))
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    95
            .sorted(Comparator.comparing(RecordedEvent::getStartTime))
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    96
            .collect(Collectors.toList());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    97
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    98
        Asserts.assertEquals(filteredEvents.size(), 1);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
    99
        RecordedEvent event = filteredEvents.get(0);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   100
        subTests[subTestIndex].verifyEvents(event);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   101
    }
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
    @SuppressWarnings("unused")
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   104
    private static class TestMain {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   105
        public static void main(String[] args) throws Exception {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   106
            ShutdownEventSubTest subTest = subTests[Integer.parseInt(args[0])];
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   107
            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
   108
            subTest.runTest();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   109
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   110
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   111
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   112
    private interface ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   113
        default boolean isApplicable() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   114
            return true;
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
        void runTest();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   117
        void verifyEvents(RecordedEvent event);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   118
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   119
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   120
    public static Unsafe getUnsafe() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   121
        try {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   122
            Field f = Unsafe.class.getDeclaredField("theUnsafe");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   123
            f.setAccessible(true);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   124
            return (Unsafe)f.get(null);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   125
        } catch (Exception e) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   126
            Asserts.fail("Could not access Unsafe");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   127
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   128
        return null;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   129
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   130
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   131
    // 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
   132
    static void validateStackTrace(RecordedStackTrace stackTrace) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   133
        List<RecordedFrame> frames = stackTrace.getFrames();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   134
        Asserts.assertFalse(frames.isEmpty());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   135
        Asserts.assertTrue(frames.stream()
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   136
                           .anyMatch(t -> t.getMethod().getName().equals("runTest")));
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   137
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   138
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
    private static class TestLastNonDaemon implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   142
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   143
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   144
            // Do nothing - this is the default exit reason
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
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   148
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   149
            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
   150
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   151
    }
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
    private static class TestSystemExit implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   154
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   155
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   156
            System.out.println("Running System.exit");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   157
            System.exit(42);
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
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   161
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   162
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   163
            validateStackTrace(event.getStackTrace());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   164
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   165
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   166
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   167
    private static class TestVMCrash implements ShutdownEventSubTest {
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
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   170
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   171
            System.out.println("Attempting to crash");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   172
            getUnsafe().putInt(0L, 0);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   173
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   174
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   175
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   176
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   177
            Events.assertField(event, "reason").equal("VM Error");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   178
            validateStackTrace(event.getStackTrace());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   179
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   180
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   181
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   182
    private static class TestUnhandledException implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   183
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   184
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   185
            throw new RuntimeException("Unhandled");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   186
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   187
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   188
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   189
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   190
            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
   191
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   192
    }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   193
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   194
    private static class TestRuntimeHalt implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   195
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   196
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   197
            System.out.println("Running Runtime.getRuntime.halt");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   198
            Runtime.getRuntime().halt(17);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   199
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   200
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   201
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   202
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   203
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   204
            validateStackTrace(event.getStackTrace());
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   205
        }
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
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   208
    private static class TestSig implements ShutdownEventSubTest {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   209
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   210
        private final String signalName;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   211
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   212
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   213
        public boolean isApplicable() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   214
            if (Platform.isWindows()) {
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
            if (signalName.equals("HUP") && Platform.isSolaris()) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   218
                return false;
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
            return true;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   221
        }
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
        public TestSig(String signalName) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   224
            this.signalName = signalName;
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   225
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   226
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   227
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   228
        public void runTest() {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   229
            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
   230
            try {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   231
                Runtime.getRuntime().exec("kill -" + signalName + " " + ProcessHandle.current().pid()).waitFor();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   232
                Thread.sleep(60_1000);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   233
            } catch (InterruptedException e) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   234
                e.printStackTrace();
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   235
            } catch (IOException e) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   236
                e.printStackTrace();
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
            Asserts.fail("Process survived the SIG" + signalName + " signal!");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   239
        }
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   240
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   241
        @Override
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   242
        public void verifyEvents(RecordedEvent event) {
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   243
            Events.assertField(event, "reason").equal("Shutdown requested from Java");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   244
            Events.assertEventThread(event);
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   245
            Asserts.assertEquals(event.getThread().getJavaName(), "SIG" + signalName + " handler");
a678ba2556ee 8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
diff changeset
   246
        }
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
}