Skip to content

Commit 1215b90

Browse files
author
Amos Shi
committed
8306583: Add JVM crash check in CDSTestUtils.executeAndLog
Backport-of: 27764e60357b018b4f403d63cb54f95604b0cb8c
1 parent 58c407a commit 1215b90

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
/*
25+
* @test TestCDSVMCrash
26+
* @summary Verify that an exception is thrown when the VM crashes during executeAndLog
27+
* @modules java.base/jdk.internal.misc
28+
* @library /test/lib
29+
* @run driver TestCDSVMCrash
30+
* @bug 8306583
31+
*/
32+
33+
import jdk.test.lib.cds.CDSTestUtils;
34+
import jdk.test.lib.process.OutputAnalyzer;
35+
import jdk.test.lib.process.ProcessTools;
36+
37+
public class TestCDSVMCrash {
38+
39+
public static void main(String[] args) throws Exception {
40+
if (args.length == 1) {
41+
// This should guarantee to throw:
42+
// java.lang.OutOfMemoryError: Requested array size exceeds VM limit
43+
try {
44+
Object[] oa = new Object[Integer.MAX_VALUE];
45+
throw new Error("OOME not triggered");
46+
} catch (OutOfMemoryError err) {
47+
throw new Error("OOME didn't abort JVM!");
48+
}
49+
}
50+
// else this is the main test
51+
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+CrashOnOutOfMemoryError",
52+
"-XX:-CreateCoredumpOnCrash", "-Xmx128m", "-Xshare:on", TestCDSVMCrash.class.getName(),"throwOOME");
53+
OutputAnalyzer output = new OutputAnalyzer(pb.start());
54+
// executeAndLog should throw an exception in the VM crashed
55+
try {
56+
CDSTestUtils.executeAndLog(pb, "cds_vm_crash");
57+
throw new Error("Expected VM to crash");
58+
} catch(RuntimeException e) {
59+
if (!e.getMessage().equals("Hotspot crashed")) {
60+
throw new Error("Expected message: Hotspot crashed");
61+
}
62+
}
63+
int exitValue = output.getExitValue();
64+
if (0 == exitValue) {
65+
//expecting a non zero value
66+
throw new Error("Expected to get non zero exit value");
67+
}
68+
output.shouldContain("A fatal error has been detected by the Java Runtime Environment");
69+
System.out.println("PASSED");
70+
}
71+
}

test/lib/jdk/test/lib/cds/CDSTestUtils.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -616,6 +616,9 @@ public static OutputAnalyzer executeAndLog(Process process, String logName) thro
616616
if (copyChildStdoutToMainStdout)
617617
System.out.println("[STDOUT]\n" + output.getStdout());
618618

619+
if (output.getExitValue() != 0 && output.getStdout().contains("A fatal error has been detected")) {
620+
throw new RuntimeException("Hotspot crashed");
621+
}
619622
return output;
620623
}
621624

0 commit comments

Comments
 (0)