Mon, 12 May 2014 06:17:05 -0700
8042804: Support invoking Hotspot tests from top level
Reviewed-by: sla, erikj
mseledtsov@5686 | 1 | /* |
mseledtsov@5686 | 2 | * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. |
mseledtsov@5686 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
mseledtsov@5686 | 4 | * |
mseledtsov@5686 | 5 | * This code is free software; you can redistribute it and/or modify it |
mseledtsov@5686 | 6 | * under the terms of the GNU General Public License version 2 only, as |
mseledtsov@5686 | 7 | * published by the Free Software Foundation. |
mseledtsov@5686 | 8 | * |
mseledtsov@5686 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
mseledtsov@5686 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
mseledtsov@5686 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
mseledtsov@5686 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
mseledtsov@5686 | 13 | * accompanied this code). |
mseledtsov@5686 | 14 | * |
mseledtsov@5686 | 15 | * You should have received a copy of the GNU General Public License version |
mseledtsov@5686 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
mseledtsov@5686 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
mseledtsov@5686 | 18 | * |
mseledtsov@5686 | 19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
mseledtsov@5686 | 20 | * or visit www.oracle.com if you need additional information or have any |
mseledtsov@5686 | 21 | * questions. |
mseledtsov@5686 | 22 | */ |
kamg@3060 | 23 | |
kamg@3060 | 24 | |
kamg@3060 | 25 | |
mseledtsov@5686 | 26 | /* |
mseledtsov@5686 | 27 | * @test JsrRewriting |
mseledtsov@5686 | 28 | * @summary JSR (jump local subroutine) |
mseledtsov@5686 | 29 | * rewriting can overflow memory address size variables |
mseledtsov@5686 | 30 | * @bug 7020373 |
mseledtsov@5686 | 31 | * @bug 7055247 |
mseledtsov@5686 | 32 | * @bug 7053586 |
mseledtsov@5686 | 33 | * @bug 7185550 |
mseledtsov@5686 | 34 | * @bug 7149464 |
mseledtsov@5686 | 35 | * @key cte_test |
mseledtsov@5686 | 36 | * @library /testlibrary |
mseledtsov@5686 | 37 | * @run main JsrRewriting |
mseledtsov@5686 | 38 | */ |
kamg@3060 | 39 | |
mseledtsov@5686 | 40 | import com.oracle.java.testlibrary.*; |
mseledtsov@5686 | 41 | import java.io.File; |
kamg@3060 | 42 | |
mseledtsov@5686 | 43 | public class JsrRewriting { |
kamg@3060 | 44 | |
mseledtsov@5686 | 45 | public static void main(String[] args) throws Exception { |
kamg@3060 | 46 | |
mseledtsov@5686 | 47 | // ======= Configure the test |
mseledtsov@5686 | 48 | String jarFile = System.getProperty("test.src") + |
mseledtsov@5686 | 49 | File.separator + "JsrRewritingTestCase.jar"; |
mseledtsov@5686 | 50 | String className = "OOMCrashClass4000_1"; |
mseledtsov@5686 | 51 | |
mseledtsov@5686 | 52 | // limit is 768MB in native words |
mseledtsov@5686 | 53 | int mallocMaxTestWords = (1024 * 1024 * 768 / 4); |
mseledtsov@5686 | 54 | if (Platform.is64bit()) |
mseledtsov@5686 | 55 | mallocMaxTestWords = (mallocMaxTestWords / 2); |
mseledtsov@5686 | 56 | |
mseledtsov@5686 | 57 | // ======= extract the test class |
mseledtsov@5686 | 58 | ProcessBuilder pb = new ProcessBuilder(new String[] { |
mseledtsov@5686 | 59 | JDKToolFinder.getJDKTool("jar"), |
mseledtsov@5686 | 60 | "xvf", jarFile } ); |
mseledtsov@5686 | 61 | OutputAnalyzer output = new OutputAnalyzer(pb.start()); |
mseledtsov@5686 | 62 | output.shouldHaveExitValue(0); |
mseledtsov@5686 | 63 | |
mseledtsov@5686 | 64 | // ======= execute the test |
mseledtsov@5686 | 65 | pb = ProcessTools.createJavaProcessBuilder( |
mseledtsov@5686 | 66 | "-cp", ".", |
mseledtsov@5686 | 67 | "-XX:+UnlockDiagnosticVMOptions", |
mseledtsov@5686 | 68 | "-XX:MallocMaxTestWords=" + mallocMaxTestWords, |
mseledtsov@5686 | 69 | className); |
mseledtsov@5686 | 70 | |
mseledtsov@5686 | 71 | output = new OutputAnalyzer(pb.start()); |
mseledtsov@5686 | 72 | String[] expectedMsgs = { |
mseledtsov@5686 | 73 | "java.lang.LinkageError", |
mseledtsov@5686 | 74 | "java.lang.NoSuchMethodError", |
mseledtsov@5686 | 75 | "Main method not found in class " + className, |
mseledtsov@5686 | 76 | "insufficient memory" |
mseledtsov@5686 | 77 | }; |
mseledtsov@5686 | 78 | |
mseledtsov@5686 | 79 | MultipleOrMatch(output, expectedMsgs); |
mseledtsov@5686 | 80 | } |
mseledtsov@5686 | 81 | |
mseledtsov@5686 | 82 | private static void |
mseledtsov@5686 | 83 | MultipleOrMatch(OutputAnalyzer analyzer, String[] whatToMatch) { |
mseledtsov@5686 | 84 | String output = analyzer.getOutput(); |
mseledtsov@5686 | 85 | |
mseledtsov@5686 | 86 | for (String expected : whatToMatch) |
mseledtsov@5686 | 87 | if (output.contains(expected)) |
mseledtsov@5686 | 88 | return; |
mseledtsov@5686 | 89 | |
mseledtsov@5686 | 90 | String err = |
mseledtsov@5686 | 91 | " stdout: [" + analyzer.getOutput() + "];\n" + |
mseledtsov@5686 | 92 | " exitValue = " + analyzer.getExitValue() + "\n"; |
mseledtsov@5686 | 93 | System.err.println(err); |
mseledtsov@5686 | 94 | |
mseledtsov@5686 | 95 | StringBuilder msg = new StringBuilder("Output did not contain " + |
mseledtsov@5686 | 96 | "any of the following expected messages: \n"); |
mseledtsov@5686 | 97 | for (String expected : whatToMatch) |
mseledtsov@5686 | 98 | msg.append(expected).append(System.lineSeparator()); |
mseledtsov@5686 | 99 | throw new RuntimeException(msg.toString()); |
mseledtsov@5686 | 100 | } |
mseledtsov@5686 | 101 | } |
mseledtsov@5686 | 102 |