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 }