1 /* 2 * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved. 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:+UnlockExperimentalVMOptions", 48 "-XX:+UseShenandoahGC", 49 "-Xms2m", 50 "-Xmx1g", 51 "-version"); 52 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 53 output.shouldMatch("Initial heap size"); 54 output.shouldHaveExitValue(1); 55 } 56 57 { 58 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 59 "-XX:+UseShenandoahGC", 60 "-Xms4m", 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 "-Xms8m", 71 "-Xmx1g", 72 "-version"); 73 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 74 output.shouldHaveExitValue(0); 75 } 76 77 { 78 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 79 "-XX:+UseShenandoahGC", 80 "-Xms100m", 81 "-Xmx1g", 82 "-XX:ShenandoahHeapRegionSize=200m", 83 "-version"); 84 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 85 output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option"); 86 output.shouldHaveExitValue(1); 87 } 88 89 { 90 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 91 "-XX:+UseShenandoahGC", 92 "-Xms100m", 93 "-Xmx1g", 94 "-XX:ShenandoahHeapRegionSize=11m", 95 "-version"); 96 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 97 output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option"); 98 output.shouldHaveExitValue(1); 99 } 100 101 { 102 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 103 "-XX:+UseShenandoahGC", 104 "-Xms100m", 105 "-Xmx1g", 106 "-XX:ShenandoahHeapRegionSize=9m", 107 "-version"); 108 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 109 output.shouldHaveExitValue(0); 110 } 111 112 { 113 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 114 "-XX:+UseShenandoahGC", 115 "-Xms100m", 116 "-Xmx1g", 117 "-XX:ShenandoahHeapRegionSize=255K", 118 "-version"); 119 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 120 output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option"); 121 output.shouldHaveExitValue(1); 122 } 123 124 { 125 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 126 "-XX:+UseShenandoahGC", 127 "-Xms100m", 128 "-Xmx1g", 129 "-XX:ShenandoahHeapRegionSize=260K", 130 "-version"); 131 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 132 output.shouldHaveExitValue(0); 133 } 134 135 { 136 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 137 "-XX:+UseShenandoahGC", 138 "-Xms1g", 139 "-Xmx1g", 140 "-XX:ShenandoahHeapRegionSize=32M", 141 "-version"); 142 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 143 output.shouldHaveExitValue(0); 144 } 145 146 { 147 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 148 "-XX:+UseShenandoahGC", 149 "-Xms1g", 150 "-Xmx1g", 151 "-XX:ShenandoahHeapRegionSize=64M", 152 "-version"); 153 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 154 output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option"); 155 output.shouldHaveExitValue(1); 156 } 157 158 { 159 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 160 "-XX:+UseShenandoahGC", 161 "-Xms1g", 162 "-Xmx1g", 163 "-XX:ShenandoahHeapRegionSize=256K", 164 "-version"); 165 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 166 output.shouldHaveExitValue(0); 167 } 168 169 { 170 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 171 "-XX:+UseShenandoahGC", 172 "-Xms1g", 173 "-Xmx1g", 174 "-XX:ShenandoahHeapRegionSize=128K", 175 "-version"); 176 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 177 output.shouldMatch("Invalid -XX:ShenandoahHeapRegionSize option"); 178 output.shouldHaveExitValue(1); 179 } 180 } 181 182 private static void testMinRegionSize() throws Exception { 183 184 { 185 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 186 "-XX:+UseShenandoahGC", 187 "-Xms100m", 188 "-Xmx1g", 189 "-XX:ShenandoahMinRegionSize=255K", 190 "-version"); 191 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 192 output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option"); 193 output.shouldHaveExitValue(1); 194 } 195 196 { 197 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 198 "-XX:+UseShenandoahGC", 199 "-Xms100m", 200 "-Xmx1g", 201 "-XX:ShenandoahMinRegionSize=1M", 202 "-XX:ShenandoahMaxRegionSize=260K", 203 "-version"); 204 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 205 output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize"); 206 output.shouldHaveExitValue(1); 207 } 208 { 209 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 210 "-XX:+UseShenandoahGC", 211 "-Xms100m", 212 "-Xmx1g", 213 "-XX:ShenandoahMinRegionSize=200m", 214 "-version"); 215 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 216 output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option"); 217 output.shouldHaveExitValue(1); 218 } 219 220 { 221 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 222 "-XX:+UseShenandoahGC", 223 "-Xms100m", 224 "-Xmx1g", 225 "-XX:ShenandoahMinRegionSize=11m", 226 "-version"); 227 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 228 output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize option"); 229 output.shouldHaveExitValue(1); 230 } 231 232 { 233 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 234 "-XX:+UseShenandoahGC", 235 "-Xms100m", 236 "-Xmx1g", 237 "-XX:ShenandoahMinRegionSize=9m", 238 "-version"); 239 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 240 output.shouldHaveExitValue(0); 241 } 242 243 } 244 245 private static void testMaxRegionSize() throws Exception { 246 247 { 248 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 249 "-XX:+UseShenandoahGC", 250 "-Xms100m", 251 "-Xmx1g", 252 "-XX:ShenandoahMaxRegionSize=255K", 253 "-version"); 254 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 255 output.shouldMatch("Invalid -XX:ShenandoahMaxRegionSize option"); 256 output.shouldHaveExitValue(1); 257 } 258 259 { 260 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockExperimentalVMOptions", 261 "-XX:+UseShenandoahGC", 262 "-Xms100m", 263 "-Xmx1g", 264 "-XX:ShenandoahMinRegionSize=1M", 265 "-XX:ShenandoahMaxRegionSize=260K", 266 "-version"); 267 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 268 output.shouldMatch("Invalid -XX:ShenandoahMinRegionSize or -XX:ShenandoahMaxRegionSize"); 269 output.shouldHaveExitValue(1); 270 } 271 } 272 }