rev 12341 : 8078450: Implement consistent process for quarantine of tests
1 /*
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. 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 * @test CorrectnessTest
26 * @bug 8038418
27 * @library /test/lib /
28 * @modules java.base/jdk.internal.misc
29 * java.management
30 *
31 * @ignore 8066173
32 * @build sun.hotspot.WhiteBox
33 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
34 * sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run main/timeout=1200 compiler.types.correctness.OffTest
36 */
37
38 package compiler.types.correctness;
39
40 import compiler.types.correctness.scenarios.ProfilingType;
41 import jdk.test.lib.process.OutputAnalyzer;
42 import jdk.test.lib.process.ProcessTools;
43 import jdk.test.lib.Utils;
44
45 import java.util.Random;
46
47 public class OffTest {
48 private static final String[] OPTIONS = {
49 "-Xbootclasspath/a:.",
50 "-XX:+IgnoreUnrecognizedVMOptions",
51 "-XX:+UnlockExperimentalVMOptions",
52 "-XX:+UnlockDiagnosticVMOptions",
53 "-XX:+WhiteBoxAPI",
54 "-XX:CompileCommand=exclude,compiler.types.correctness.execution.*::methodNotToCompile",
55 "-XX:CompileCommand=dontinline,compiler.types.correctness.scenarios.Scenario::collectReturnType",
56 "", // -XX:TypeProfileLevel=?
57 "", // -XX:?UseTypeSpeculation
58 CorrectnessTest.class.getName(),
59 "", // ProfilingType.name()
60 };
61
62 private static final String TYPE_PROFILE_LEVEL = "TypeProfileLevel";
63 private static final String USE_TYPE_SPECULATION = "UseTypeSpeculation";
64 private static final int TYPE_PROFILE_LEVEL_LENGTH = 3;
65 private static final int TYPE_PROFILE_LEVEL_BOUND = 3;
66 private static final int DEFAULT_COUNT = 10;
67 private static final int PROFILING_TYPE_INDEX = OPTIONS.length - 1;
68 private static final int TYPE_PROFILE_INDEX = OPTIONS.length - 4;
69 private static final int USE_TYPE_SPECULATION_INDEX = OPTIONS.length - 3;
70 private static final Random RNG = Utils.getRandomInstance();
71
72 public static void main(String[] args) throws Exception {
73 int count = DEFAULT_COUNT;
74 if (args.length > 0) {
75 count = Integer.parseInt(args[0]) ;
76 }
77 for (int i = 0; i < count; ++i) {
78 runTest();
79 }
80 }
81
82 private static void runTest() throws Exception {
83 String useTypeSpeculation = "-XX:" + (RNG.nextBoolean() ? "+" : "-") + USE_TYPE_SPECULATION;
84 String typeProfileLevel = "-XX:" + TYPE_PROFILE_LEVEL + "=" + randomTypeProfileLevel();
85 ProfilingType type = randomProfileType();
86 OPTIONS[TYPE_PROFILE_INDEX] = typeProfileLevel;
87 OPTIONS[USE_TYPE_SPECULATION_INDEX] = useTypeSpeculation;
88 OPTIONS[PROFILING_TYPE_INDEX] = type.name();
89 ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder(/* addTestVmOptions= */ true, OPTIONS);
90 OutputAnalyzer outputAnalyzer = new OutputAnalyzer(processBuilder.start());
91 outputAnalyzer.shouldHaveExitValue(0);
92 }
93
94 private static ProfilingType randomProfileType() {
95 ProfilingType[] value = ProfilingType.values();
96 return value[RNG.nextInt(value.length)];
97 }
98
99 private static String randomTypeProfileLevel() {
100 StringBuilder stringBuilder = new StringBuilder();
101 for (int i = 0; i < TYPE_PROFILE_LEVEL_LENGTH; ++i) {
102 stringBuilder.append(RNG.nextInt(TYPE_PROFILE_LEVEL_BOUND));
103 }
104 return stringBuilder.toString();
105 }
106 }
--- EOF ---