Merge
This commit is contained in:
commit
363bf8088b
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -83,6 +83,13 @@ public class TestOptionsWithRanges {
|
||||
setAllowedExitCodes("SharedMiscDataSize", 2);
|
||||
setAllowedExitCodes("SharedMiscCodeSize", 2);
|
||||
|
||||
/*
|
||||
* JDK-8145204
|
||||
* Temporarily remove testing of max range for ParGCArrayScanChunk because
|
||||
* JVM can hang when ParGCArrayScanChunk=4294967296 and ParallelGC is used
|
||||
*/
|
||||
excludeTestMaxRange("ParGCArrayScanChunk");
|
||||
|
||||
/*
|
||||
* Remove CICompilerCount from testing because currently it can hang system
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -37,6 +37,7 @@ import jdk.test.lib.dcmd.JMXExecutor;
|
||||
import sun.tools.attach.HotSpotVirtualMachine;
|
||||
|
||||
import static optionsvalidation.JVMOptionsUtils.failedMessage;
|
||||
import static optionsvalidation.JVMOptionsUtils.GCType;
|
||||
import static optionsvalidation.JVMOptionsUtils.printOutputContent;
|
||||
import static optionsvalidation.JVMOptionsUtils.VMType;
|
||||
|
||||
@ -374,17 +375,21 @@ public abstract class JVMOption {
|
||||
private boolean runJavaWithParam(String optionValue, boolean valid) throws Exception {
|
||||
int exitCode;
|
||||
boolean result = true;
|
||||
String value = optionValue.substring(optionValue.lastIndexOf("=") + 1);
|
||||
String fullOptionString = prependString.toString() + optionValue;
|
||||
String errorMessage = null;
|
||||
List<String> runJava = new ArrayList<>();
|
||||
OutputAnalyzer out;
|
||||
|
||||
if (VMType != null) {
|
||||
runJava.add(VMType);
|
||||
}
|
||||
|
||||
if (GCType != null) {
|
||||
runJava.add(GCType);
|
||||
}
|
||||
|
||||
runJava.addAll(prepend);
|
||||
runJava.add(optionValue);
|
||||
runJava.add(JVMOptionsUtils.class.getName());
|
||||
runJava.add(JVMStartup.class.getName());
|
||||
|
||||
out = new OutputAnalyzer(ProcessTools.createJavaProcessBuilder(runJava.toArray(new String[0])).start());
|
||||
|
||||
@ -392,40 +397,37 @@ public abstract class JVMOption {
|
||||
|
||||
if (out.getOutput().contains("A fatal error has been detected by the Java Runtime Environment")) {
|
||||
/* Always consider "fatal error" in output as fail */
|
||||
failedMessage(name, fullOptionString, valid, "JVM output reports a fatal error. JVM exited with code " + exitCode + "!");
|
||||
printOutputContent(out);
|
||||
result = false;
|
||||
errorMessage = "JVM output reports a fatal error. JVM exited with code " + exitCode + "!";
|
||||
} else if (valid == true) {
|
||||
if (!allowedExitCodes.contains(exitCode)) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM exited with unexpected error code = " + exitCode);
|
||||
printOutputContent(out);
|
||||
result = false;
|
||||
errorMessage = "JVM exited with unexpected error code = " + exitCode;
|
||||
} else if ((exitCode != 0) && (out.getOutput().isEmpty() == true)) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM exited with error(exitcode == " + exitCode +
|
||||
"), but with empty stdout and stderr. Description of error is needed!");
|
||||
result = false;
|
||||
errorMessage = "JVM exited with error(exitcode == " + exitCode + "), but with empty stdout and stderr. " +
|
||||
"Description of error is needed!";
|
||||
} else if (out.getOutput().contains("is outside the allowed range")) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM output contains \"is outside the allowed range\"");
|
||||
printOutputContent(out);
|
||||
result = false;
|
||||
errorMessage = "JVM output contains \"is outside the allowed range\"";
|
||||
}
|
||||
} else {
|
||||
// valid == false
|
||||
String value = optionValue.substring(optionValue.lastIndexOf("=") + 1);
|
||||
String errorMessageCommandLineValue = getErrorMessageCommandLine(value);
|
||||
if (exitCode == 0) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM successfully exit");
|
||||
result = false;
|
||||
errorMessage = "JVM successfully exit";
|
||||
} else if (exitCode != 1) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM exited with code "
|
||||
+ exitCode + " which not equal to 1");
|
||||
result = false;
|
||||
} else if (!out.getOutput().contains(getErrorMessageCommandLine(value))) {
|
||||
failedMessage(name, fullOptionString, valid, "JVM output does not contain "
|
||||
+ "expected output \"" + getErrorMessageCommandLine(value) + "\"");
|
||||
printOutputContent(out);
|
||||
result = false;
|
||||
errorMessage = "JVM exited with code " + exitCode + " which not equal to 1";
|
||||
} else if (!out.getOutput().contains(errorMessageCommandLineValue)) {
|
||||
errorMessage = "JVM output does not contain expected output \"" + errorMessageCommandLineValue + "\"";
|
||||
}
|
||||
}
|
||||
|
||||
if (errorMessage != null) {
|
||||
String fullOptionString = String.format("%s %s %s %s",
|
||||
VMType == null ? "" : VMType, GCType == null ? "" : GCType, prependString.toString(), optionValue).trim().replaceAll(" +", " ");
|
||||
failedMessage(name, fullOptionString, valid, errorMessage);
|
||||
printOutputContent(out);
|
||||
result = false;
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
|
||||
return result;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,6 +27,8 @@ import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.lang.management.GarbageCollectorMXBean;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -50,6 +52,9 @@ public class JVMOptionsUtils {
|
||||
/* Used to start the JVM with the same type as current */
|
||||
static String VMType;
|
||||
|
||||
/* Used to start the JVM with the same GC type as current */
|
||||
static String GCType;
|
||||
|
||||
private static Map<String, JVMOption> optionsAsMap;
|
||||
|
||||
static {
|
||||
@ -64,6 +69,27 @@ public class JVMOptionsUtils {
|
||||
} else {
|
||||
VMType = null;
|
||||
}
|
||||
|
||||
List<GarbageCollectorMXBean> gcMxBeans = ManagementFactory.getGarbageCollectorMXBeans();
|
||||
|
||||
GCType = null;
|
||||
|
||||
for (GarbageCollectorMXBean gcMxBean : gcMxBeans) {
|
||||
switch (gcMxBean.getName()) {
|
||||
case "ConcurrentMarkSweep":
|
||||
GCType = "-XX:+UseConcMarkSweepGC";
|
||||
break;
|
||||
case "MarkSweepCompact":
|
||||
GCType = "-XX:+UseSerialGC";
|
||||
break;
|
||||
case "PS Scavenge":
|
||||
GCType = "-XX:+UseParallelGC";
|
||||
break;
|
||||
case "G1 Old Generation":
|
||||
GCType = "-XX:+UseG1GC";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean fitsRange(String optionName, BigDecimal number) throws Exception {
|
||||
@ -443,6 +469,10 @@ public class JVMOptionsUtils {
|
||||
if (VMType != null) {
|
||||
runJava.add(VMType);
|
||||
}
|
||||
|
||||
if (GCType != null) {
|
||||
runJava.add(GCType);
|
||||
}
|
||||
runJava.add(PRINT_FLAGS_RANGES);
|
||||
runJava.add("-version");
|
||||
|
||||
@ -534,9 +564,4 @@ public class JVMOptionsUtils {
|
||||
public static Map<String, JVMOption> getOptionsWithRangeAsMap(String... additionalArgs) throws Exception {
|
||||
return getOptionsWithRangeAsMap(origin -> true, additionalArgs);
|
||||
}
|
||||
|
||||
/* Simple method to test that java start-up. Used for testing options. */
|
||||
public static void main(String[] args) {
|
||||
System.out.print("Java start-up!");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package optionsvalidation;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
class JVMStartup {
|
||||
private static volatile WeakReference<Object> weakRef;
|
||||
|
||||
private static synchronized void createWeakRef() {
|
||||
Object o = new Object();
|
||||
weakRef = new WeakReference<>(o);
|
||||
}
|
||||
|
||||
/* Simple method to test that java start-up. Used for testing options. */
|
||||
public static void main(String[] args) throws Exception {
|
||||
byte[] garbage = new byte[8192];
|
||||
int i = 0;
|
||||
createWeakRef();
|
||||
do {
|
||||
garbage = new byte[8192];
|
||||
i++;
|
||||
/* Initiate GC after 5 iterations */
|
||||
if (i > 5) {
|
||||
System.gc();
|
||||
}
|
||||
} while(weakRef.get() != null);
|
||||
System.out.println("Java start-up!");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user