1 /*
   2  * Copyright (c) 2016 Red Hat, Inc. and/or its affiliates.
   3  *
   4  * This code is free software; you can redistribute it and/or modify it
   5  * under the terms of the GNU General Public License version 2 only, as
   6  * published by the Free Software Foundation.
   7  *
   8  * This code is distributed in the hope that it will be useful, but WITHOUT
   9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  11  * version 2 for more details (a copy is included in the LICENSE file that
  12  * accompanied this code).
  13  *
  14  * You should have received a copy of the GNU General Public License version
  15  * 2 along with this work; if not, write to the Free Software Foundation,
  16  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  17  *
  18  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  19  * or visit www.oracle.com if you need additional information or have any
  20  * questions.
  21  *
  22  */
  23 
  24 /*
  25  * @test TestRegionSizeArgs
  26  * @summary Test that Shenandoah region size args are checked
  27  * @key gc
  28  * @library /test/lib
  29  * @modules java.base/jdk.internal.misc
  30  *          java.management
  31  * @run driver TestRegionSizeArgs
  32  */
  33 
  34 import jdk.test.lib.process.ProcessTools;
  35 import jdk.test.lib.process.OutputAnalyzer;
  36 
  37 public class TestRegionSizeArgs {
  38     public static void main(String[] args) throws Exception {
  39         testInvalidRegionSizes();
  40         testMinRegionSize();
  41         testMaxRegionSize();
  42     }
  43 
  44     private static void testInvalidRegionSizes() throws Exception {
  45 
  46         {
  47             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  48                                                                       "-Xms100m",
  49                                                                       "-XX:ShenandoahHeapRegionSize=200m",
  50                                                                       "-version");
  51             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  52             output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option");
  53             output.shouldHaveExitValue(1);
  54         }
  55 
  56         {
  57             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  58                                                                       "-Xms100m",
  59                                                                       "-XX:ShenandoahHeapRegionSize=11m",
  60                                                                       "-version");
  61             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  62             output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option");
  63             output.shouldHaveExitValue(1);
  64         }
  65 
  66         {
  67             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  68                                                                       "-Xms100m",
  69                                                                       "-XX:ShenandoahHeapRegionSize=9m",
  70                                                                       "-version");
  71             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  72             output.shouldHaveExitValue(0);
  73         }
  74 
  75         {
  76             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  77                                                                       "-Xms100m",
  78                                                                       "-XX:ShenandoahHeapRegionSize=255K",
  79                                                                       "-version");
  80             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  81             output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option");
  82             output.shouldHaveExitValue(1);
  83         }
  84 
  85         {
  86             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  87                                                                       "-Xms100m",
  88                                                                       "-XX:ShenandoahHeapRegionSize=260K",
  89                                                                       "-version");
  90             OutputAnalyzer output = new OutputAnalyzer(pb.start());
  91             output.shouldHaveExitValue(0);
  92         }
  93     }
  94 
  95     private static void testMinRegionSize() throws Exception {
  96 
  97         {
  98             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
  99                                                                       "-Xms100m",
 100                                                                       "-XX:+UnlockExperimentalVMOptions",
 101                                                                       "-XX:ShenandoahMinRegionSize=255K",
 102                                                                       "-version");
 103             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 104             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option");
 105             output.shouldHaveExitValue(1);
 106         }
 107 
 108         {
 109             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 110                                                                       "-Xms100m",
 111                                                                       "-XX:+UnlockExperimentalVMOptions",
 112                                                                       "-XX:ShenandoahMinRegionSize=1M",
 113                                                                       "-XX:ShenandoahMaxRegionSize=260K",
 114                                                                       "-version");
 115             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 116             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize");
 117             output.shouldHaveExitValue(1);
 118         }
 119         {
 120             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 121                                                                       "-Xms100m",
 122                                                                       "-XX:+UnlockExperimentalVMOptions",
 123                                                                       "-XX:ShenandoahMinRegionSize=200m",
 124                                                                       "-version");
 125             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 126             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option");
 127             output.shouldHaveExitValue(1);
 128         }
 129 
 130         {
 131             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 132                                                                       "-Xms100m",
 133                                                                       "-XX:+UnlockExperimentalVMOptions",
 134                                                                       "-XX:ShenandoahMinRegionSize=11m",
 135                                                                       "-version");
 136             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 137             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option");
 138             output.shouldHaveExitValue(1);
 139         }
 140 
 141         {
 142             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 143                                                                       "-Xms100m",
 144                                                                       "-XX:+UnlockExperimentalVMOptions",
 145                                                                       "-XX:ShenandoahMinRegionSize=9m",
 146                                                                       "-version");
 147             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 148             output.shouldHaveExitValue(0);
 149         }
 150 
 151     }
 152 
 153     private static void testMaxRegionSize() throws Exception {
 154 
 155         {
 156             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 157                                                                       "-Xms100m",
 158                                                                       "-XX:+UnlockExperimentalVMOptions",
 159                                                                       "-XX:ShenandoahMaxRegionSize=255K",
 160                                                                       "-version");
 161             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 162             output.shouldMatch("Invalid -XX:ShenandoahMaxRegionSize option");
 163             output.shouldHaveExitValue(1);
 164         }
 165 
 166         {
 167             ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseShenandoahGC",
 168                                                                       "-Xms100m",
 169                                                                       "-XX:+UnlockExperimentalVMOptions",
 170                                                                       "-XX:ShenandoahMinRegionSize=1M",
 171                                                                       "-XX:ShenandoahMaxRegionSize=260K",
 172                                                                       "-version");
 173             OutputAnalyzer output = new OutputAnalyzer(pb.start());
 174             output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize");
 175             output.shouldHaveExitValue(1);
 176         }
 177     }
 178 }