1 /*
   2  * Copyright (c) 2016, 2018, Red Hat, Inc. 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 /*
  26  * @test TestRegionSizeArgs
  27  * @summary Test that Shenandoah region size args are checked
  28  * @requires vm.gc.Shenandoah & !vm.graal.enabled
  29  * @library /test/lib
  30  * @modules java.base/jdk.internal.misc
  31  *          java.management
  32  * @run driver TestRegionSizeArgs
  33  */
  34 
  35 import jdk.test.lib.process.ProcessTools;
  36 import jdk.test.lib.process.OutputAnalyzer;
  37 
  38 public class TestRegionSizeArgs {
  39     public static void main(String[] args) throws Exception {
  40         testInvalidRegionSizes();
  41         testMinRegionSize();
  42         testMaxRegionSize();
  43     }
  44 
  45     private static void testInvalidRegionSizes() throws Exception {
  46 
  47         {
  48             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
  49                     "-XX:+UseShenandoahGC",
  50                     "-Xms4m",
  51                     "-Xmx1g",
  52                     "-version");
  53             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  54             output.shouldHaveExitValue(0);
  55         }
  56 
  57         {
  58             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
  59                     "-XX:+UseShenandoahGC",
  60                     "-Xms8m",
  61                     "-Xmx1g",
  62                     "-version");
  63             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  64             output.shouldHaveExitValue(0);
  65         }
  66 
  67         {
  68             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
  69                     "-XX:+UseShenandoahGC",
  70                     "-Xms100m",
  71                     "-Xmx1g",
  72                     "-XX:ShenandoahRegionSize=200m",
  73                     "-version");
  74             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  75             output.shouldMatch("Invalid -XX:ShenandoahRegionSize option");
  76             output.shouldHaveExitValue(1);
  77         }
  78 
  79         {
  80             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
  81                     "-XX:+UseShenandoahGC",
  82                     "-Xms100m",
  83                     "-Xmx1g",
  84                     "-XX:ShenandoahRegionSize=9m",
  85                     "-version");
  86             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  87             output.shouldHaveExitValue(0);
  88         }
  89 
  90         {
  91             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
  92                     "-XX:+UseShenandoahGC",
  93                     "-Xms100m",
  94                     "-Xmx1g",
  95                     "-XX:ShenandoahRegionSize=255K",
  96                     "-version");
  97             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  98             output.shouldMatch("Invalid -XX:ShenandoahRegionSize option");
  99             output.shouldHaveExitValue(1);
 100         }
 101 
 102         {
 103             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 104                     "-XX:+UseShenandoahGC",
 105                     "-Xms100m",
 106                     "-Xmx1g",
 107                     "-XX:ShenandoahRegionSize=260K",
 108                     "-version");
 109             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 110             output.shouldHaveExitValue(0);
 111         }
 112 
 113         {
 114             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 115                     "-XX:+UseShenandoahGC",
 116                     "-Xms1g",
 117                     "-Xmx1g",
 118                     "-XX:ShenandoahRegionSize=32M",
 119                     "-version");
 120             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 121             output.shouldHaveExitValue(0);
 122         }
 123 
 124         {
 125             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 126                     "-XX:+UseShenandoahGC",
 127                     "-Xms1g",
 128                     "-Xmx1g",
 129                     "-XX:ShenandoahRegionSize=64M",
 130                     "-version");
 131             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 132             output.shouldMatch("Invalid -XX:ShenandoahRegionSize option");
 133             output.shouldHaveExitValue(1);
 134         }
 135 
 136         {
 137             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 138                     "-XX:+UseShenandoahGC",
 139                     "-Xms1g",
 140                     "-Xmx1g",
 141                     "-XX:ShenandoahRegionSize=256K",
 142                     "-version");
 143             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 144             output.shouldHaveExitValue(0);
 145         }
 146 
 147         {
 148             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 149                     "-XX:+UseShenandoahGC",
 150                     "-Xms1g",
 151                     "-Xmx1g",
 152                     "-XX:ShenandoahRegionSize=128K",
 153                     "-version");
 154             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 155             output.shouldMatch("Invalid -XX:ShenandoahRegionSize option");
 156             output.shouldHaveExitValue(1);
 157         }
 158     }
 159 
 160     private static void testMinRegionSize() throws Exception {
 161 
 162         {
 163             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 164                     "-XX:+UseShenandoahGC",
 165                     "-Xms100m",
 166                     "-Xmx1g",
 167                     "-XX:ShenandoahMinRegionSize=255K",
 168                     "-version");
 169             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 170             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option");
 171             output.shouldHaveExitValue(1);
 172         }
 173 
 174         {
 175             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 176                     "-XX:+UseShenandoahGC",
 177                     "-Xms100m",
 178                     "-Xmx1g",
 179                     "-XX:ShenandoahMinRegionSize=1M",
 180                     "-XX:ShenandoahMaxRegionSize=260K",
 181                     "-version");
 182             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 183             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize");
 184             output.shouldHaveExitValue(1);
 185         }
 186         {
 187             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 188                     "-XX:+UseShenandoahGC",
 189                     "-Xms100m",
 190                     "-Xmx1g",
 191                     "-XX:ShenandoahMinRegionSize=200m",
 192                     "-version");
 193             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 194             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option");
 195             output.shouldHaveExitValue(1);
 196         }
 197 
 198         {
 199             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 200                     "-XX:+UseShenandoahGC",
 201                     "-Xms100m",
 202                     "-Xmx1g",
 203                     "-XX:ShenandoahMinRegionSize=9m",
 204                     "-version");
 205             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 206             output.shouldHaveExitValue(0);
 207         }
 208 
 209     }
 210 
 211     private static void testMaxRegionSize() throws Exception {
 212 
 213         {
 214             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 215                     "-XX:+UseShenandoahGC",
 216                     "-Xms100m",
 217                     "-Xmx1g",
 218                     "-XX:ShenandoahMaxRegionSize=255K",
 219                     "-version");
 220             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 221             output.shouldMatch("Invalid -XX:ShenandoahMaxRegionSize option");
 222             output.shouldHaveExitValue(1);
 223         }
 224 
 225         {
 226             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions",
 227                     "-XX:+UseShenandoahGC",
 228                     "-Xms100m",
 229                     "-Xmx1g",
 230                     "-XX:ShenandoahMinRegionSize=1M",
 231                     "-XX:ShenandoahMaxRegionSize=260K",
 232                     "-version");
 233             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 234             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize");
 235             output.shouldHaveExitValue(1);
 236         }
 237     }
 238 }