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 }