author | mbaesken |
Fri, 09 Aug 2019 15:39:32 +0200 | |
changeset 57712 | 145300cc8ea6 |
parent 53559 | 1ae0b76bb5df |
permissions | -rw-r--r-- |
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 |
} |