1 /* 2 * Copyright (c) 2013, 2015, 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 import jdk.test.lib.*; 25 26 /* 27 * @test 28 * @bug 8129855 29 * @summary -XX:+IgnoreUnrecognizedVMOptions should work according to the spec from https://bugs.openjdk.java.net/browse/JDK-8129855?focusedCommentId=13828658&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13828658 30 * 31 * @library /testlibrary 32 * @modules java.base/sun.misc 33 * java.management 34 * @run main IgnoreUnrecognizedVMOptions 35 */ 36 public class IgnoreUnrecognizedVMOptions { 37 38 public static void main(String[] args) throws Exception { 39 ProcessBuilder pb; 40 OutputAnalyzer output; 41 42 pb = ProcessTools.createJavaProcessBuilder("-version"); 43 output = new OutputAnalyzer(pb.start()); 44 boolean product = false; 45 try { 46 output.shouldContain("debug"); 47 } catch (RuntimeException e) { 48 product = true; 49 } 50 51 /* 52 #1.1 normal flag: 53 exists, invalid value does not exist 54 -XX:MinHeapFreeRatio=notnum -XX:THIS_FLAG_DOESNT_EXIST 55 -IgnoreUnrecognizedVMOptions ERR ERR 56 +IgnoreUnrecognizedVMOptions ERR OK 57 */ 58 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:MinHeapFreeRatio=notnum", "-version"); 59 output = new OutputAnalyzer(pb.start()); 60 output.shouldHaveExitValue(1); 61 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:THIS_FLAG_DOESNT_EXIST", "-version"); 62 output = new OutputAnalyzer(pb.start()); 63 output.shouldHaveExitValue(1); 64 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:MinHeapFreeRatio=notnum", "-version"); 65 output = new OutputAnalyzer(pb.start()); 66 output.shouldHaveExitValue(1); 67 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:THIS_FLAG_DOESNT_EXIST", "-version"); 68 output = new OutputAnalyzer(pb.start()); 69 output.shouldHaveExitValue(0); 70 71 /* 72 #1.2 normal flag with ranges: 73 exists, in range exists, out of range 74 -XX:StackRedPages=1 -XX:StackRedPages=0 75 -IgnoreUnrecognizedVMOptions OK ERR 76 +IgnoreUnrecognizedVMOptions OK ERR 77 */ 78 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:StackRedPages=1", "-version"); 79 output = new OutputAnalyzer(pb.start()); 80 output.shouldHaveExitValue(0); 81 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:StackRedPages=0", "-version"); 82 output = new OutputAnalyzer(pb.start()); 83 output.shouldHaveExitValue(1); 84 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:StackRedPages=1", "-version"); 85 output = new OutputAnalyzer(pb.start()); 86 output.shouldHaveExitValue(0); 87 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:StackRedPages=0", "-version"); 88 output = new OutputAnalyzer(pb.start()); 89 output.shouldHaveExitValue(1); 90 91 /* 92 #1.3 locked flag: 93 diagnostic & locked experimental & locked commercial & locked 94 -XX:-UnlockDiagnosticVMOptions -XX:-UnlockExperimentalVMOptions -XX:-UnlockCommercialFeatures 95 -XX:+PrintInlining -XX:+AlwaysSafeConstructors -XX:+FlightRecorder 96 -IgnoreUnrecognizedVMOptions ERR ERR ERR 97 +IgnoreUnrecognizedVMOptions ERR ERR ERR 98 */ 99 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+PrintInlining", "-version"); 100 output = new OutputAnalyzer(pb.start()); 101 output.shouldHaveExitValue(1); 102 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+AlwaysSafeConstructors", "-version"); 103 output = new OutputAnalyzer(pb.start()); 104 output.shouldHaveExitValue(1); 105 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+FlightRecorder", "-version"); 106 output = new OutputAnalyzer(pb.start()); 107 output.shouldHaveExitValue(1); 108 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+PrintInlining", "-version"); 109 output = new OutputAnalyzer(pb.start()); 110 output.shouldHaveExitValue(1); 111 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+AlwaysSafeConstructors", "-version"); 112 output = new OutputAnalyzer(pb.start()); 113 output.shouldHaveExitValue(1); 114 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:+FlightRecorder", "-version"); 115 output = new OutputAnalyzer(pb.start()); 116 output.shouldHaveExitValue(1); 117 118 /* 119 #1.4 develop & notproduct flag on debug VM: 120 develop & !product_build notproduct & !product_build 121 -XX:+DeoptimizeALot -XX:+VerifyCodeCache 122 -IgnoreUnrecognizedVMOptions OK OK 123 +IgnoreUnrecognizedVMOptions OK OK 124 */ 125 if (!product) { 126 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:+DeoptimizeALot", "-version"); 127 output = new OutputAnalyzer(pb.start()); 128 output.shouldHaveExitValue(0); 129 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:+VerifyCodeCache", "-version"); 130 output = new OutputAnalyzer(pb.start()); 131 output.shouldHaveExitValue(0); 132 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+DeoptimizeALot", "-version"); 133 output = new OutputAnalyzer(pb.start()); 134 output.shouldHaveExitValue(0); 135 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+VerifyCodeCache", "-version"); 136 output = new OutputAnalyzer(pb.start()); 137 output.shouldHaveExitValue(0); 138 } 139 140 /* 141 #1.5 develop & notproduct flag on product VM: 142 develop & !product_build notproduct & !product_build 143 -XX:+DeoptimizeALot -XX:+VerifyCodeCache 144 -IgnoreUnrecognizedVMOptions ERR ERR 145 +IgnoreUnrecognizedVMOptions OK OK 146 */ 147 if (product) { 148 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:+DeoptimizeALot", "-version"); 149 output = new OutputAnalyzer(pb.start()); 150 output.shouldHaveExitValue(1); 151 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:+VerifyCodeCache", "-version"); 152 output = new OutputAnalyzer(pb.start()); 153 output.shouldHaveExitValue(1); 154 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+DeoptimizeALot", "-version"); 155 output = new OutputAnalyzer(pb.start()); 156 output.shouldHaveExitValue(0); 157 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+VerifyCodeCache", "-version"); 158 output = new OutputAnalyzer(pb.start()); 159 output.shouldHaveExitValue(0); 160 } 161 162 /* 163 #1.6 malformed locked flag: 164 diagnostic & locked experimental & locked commercial & locked 165 -XX:-UnlockDiagnosticVMOptions -XX:-UnlockExperimentalVMOptions -XX:-UnlockCommercialFeatures 166 -XX:PrintInlining -XX:AlwaysSafeConstructors -XX:FlightRecorder 167 -IgnoreUnrecognizedVMOptions ERR ERR ERR 168 +IgnoreUnrecognizedVMOptions ERR ERR ERR 169 */ 170 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:PrintInlining", "-version"); 171 output = new OutputAnalyzer(pb.start()); 172 output.shouldHaveExitValue(1); 173 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:AlwaysSafeConstructors", "-version"); 174 output = new OutputAnalyzer(pb.start()); 175 output.shouldHaveExitValue(1); 176 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:FlightRecorder", "-version"); 177 output = new OutputAnalyzer(pb.start()); 178 output.shouldHaveExitValue(1); 179 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:PrintInlining", "-version"); 180 output = new OutputAnalyzer(pb.start()); 181 output.shouldHaveExitValue(1); 182 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:AlwaysSafeConstructors", "-version"); 183 output = new OutputAnalyzer(pb.start()); 184 output.shouldHaveExitValue(1); 185 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-UnlockDiagnosticVMOptions", "-XX:FlightRecorder", "-version"); 186 output = new OutputAnalyzer(pb.start()); 187 output.shouldHaveExitValue(1); 188 189 /* 190 #1.7 malformed develop & notproduct flag on debug VM: 191 develop & !product_build notproduct & !product_build 192 -XX:DeoptimizeALot -XX:VerifyCodeCache 193 -IgnoreUnrecognizedVMOptions ERR ERR 194 +IgnoreUnrecognizedVMOptions ERR ERR 195 */ 196 if (!product) { 197 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:DeoptimizeALot", "-version"); 198 output = new OutputAnalyzer(pb.start()); 199 output.shouldHaveExitValue(1); 200 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:VerifyCodeCache", "-version"); 201 output = new OutputAnalyzer(pb.start()); 202 output.shouldHaveExitValue(1); 203 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:DeoptimizeALot", "-version"); 204 output = new OutputAnalyzer(pb.start()); 205 output.shouldHaveExitValue(1); 206 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:VerifyCodeCache", "-version"); 207 output = new OutputAnalyzer(pb.start()); 208 output.shouldHaveExitValue(1); 209 } 210 211 /* 212 #1.8 malformed develop & notproduct flag on product VM: 213 develop & !product_build .notproduct & !product_build 214 -XX:DeoptimizeALot -XX:VerifyCodeCache 215 -IgnoreUnrecognizedVMOptions ERR ERR 216 +IgnoreUnrecognizedVMOptions OK OK 217 */ 218 if (product) { 219 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:DeoptimizeALot", "-version"); 220 output = new OutputAnalyzer(pb.start()); 221 output.shouldHaveExitValue(1); 222 pb = ProcessTools.createJavaProcessBuilder("-XX:-IgnoreUnrecognizedVMOptions", "-XX:VerifyCodeCache", "-version"); 223 output = new OutputAnalyzer(pb.start()); 224 output.shouldHaveExitValue(1); 225 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:DeoptimizeALot", "-version"); 226 output = new OutputAnalyzer(pb.start()); 227 output.shouldHaveExitValue(0); 228 pb = ProcessTools.createJavaProcessBuilder("-XX:+IgnoreUnrecognizedVMOptions", "-XX:VerifyCodeCache", "-version"); 229 output = new OutputAnalyzer(pb.start()); 230 output.shouldHaveExitValue(0); 231 } 232 233 } 234 }