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