UseSHASpecificTestCaseForSupportedCPU.java revision 11707:ad7af1afda7a
1/*
2 * Copyright (c) 2014, 2015, 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
24package compiler.intrinsics.sha.cli.testcases;
25
26import compiler.intrinsics.sha.cli.SHAOptionsBase;
27import compiler.testlibrary.sha.predicate.IntrinsicPredicates;
28import jdk.test.lib.Asserts;
29import jdk.test.lib.ExitCode;
30import jdk.test.lib.Platform;
31import jdk.test.lib.cli.CommandLineOptionTest;
32import jdk.test.lib.cli.predicate.AndPredicate;
33import jdk.test.lib.cli.predicate.OrPredicate;
34
35/**
36 * UseSHA specific test case targeted to SPARC and AArch64 CPUs which
37 * support any sha* instruction.
38 */
39public class UseSHASpecificTestCaseForSupportedCPU
40        extends SHAOptionsBase.TestCase {
41    public UseSHASpecificTestCaseForSupportedCPU(String optionName) {
42        super(SHAOptionsBase.USE_SHA_OPTION, new AndPredicate(
43                new OrPredicate(Platform::isSparc, Platform::isAArch64),
44                IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE));
45
46        Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION,
47                String.format("Test case should be used for '%s' option only.",
48                        SHAOptionsBase.USE_SHA_OPTION));
49    }
50
51    @Override
52    protected void verifyWarnings() throws Throwable {
53        String shouldPassMessage = String.format("JVM startup should pass when"
54                        + " %s was passed and all UseSHA*Intrinsics options "
55                        + "were disabled",
56                        CommandLineOptionTest.prepareBooleanFlag(
57                            SHAOptionsBase.USE_SHA_OPTION, true));
58        // Verify that there will be no warnings when +UseSHA was passed and
59        // all UseSHA*Intrinsics options were disabled.
60        CommandLineOptionTest.verifySameJVMStartup(
61                null, new String[] { ".*UseSHA.*" }, shouldPassMessage,
62                shouldPassMessage, ExitCode.OK,
63                SHAOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
64                CommandLineOptionTest.prepareBooleanFlag(
65                        SHAOptionsBase.USE_SHA_OPTION, true),
66                CommandLineOptionTest.prepareBooleanFlag(
67                        SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false),
68                CommandLineOptionTest.prepareBooleanFlag(
69                        SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false),
70                CommandLineOptionTest.prepareBooleanFlag(
71                        SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false));
72    }
73
74    @Override
75    protected void verifyOptionValues() throws Throwable {
76        // Verify that UseSHA is disabled when all UseSHA*Intrinsics are
77        // disabled.
78        CommandLineOptionTest.verifyOptionValueForSameVM(
79                SHAOptionsBase.USE_SHA_OPTION, "false", String.format(
80                "'%s' option should be disabled when all UseSHA*Intrinsics are"
81                        + " disabled", SHAOptionsBase.USE_SHA_OPTION),
82                SHAOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
83                CommandLineOptionTest.prepareBooleanFlag(
84                        SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false),
85                CommandLineOptionTest.prepareBooleanFlag(
86                        SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false),
87                CommandLineOptionTest.prepareBooleanFlag(
88                        SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false));
89
90        CommandLineOptionTest.verifyOptionValueForSameVM(
91                // Verify that UseSHA is disabled when all UseSHA*Intrinsics are
92                // disabled even if it was explicitly enabled.
93                SHAOptionsBase.USE_SHA_OPTION, "false",
94                String.format("'%s' option should be disabled when all "
95                        + "UseSHA*Intrinsics are disabled even if %s flag set "
96                        + "to JVM", SHAOptionsBase.USE_SHA_OPTION,
97                        CommandLineOptionTest.prepareBooleanFlag(
98                             SHAOptionsBase.USE_SHA_OPTION, true)),
99                SHAOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
100                CommandLineOptionTest.prepareBooleanFlag(
101                        SHAOptionsBase.USE_SHA_OPTION, true),
102                CommandLineOptionTest.prepareBooleanFlag(
103                        SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false),
104                CommandLineOptionTest.prepareBooleanFlag(
105                        SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, false),
106                CommandLineOptionTest.prepareBooleanFlag(
107                        SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false));
108
109        // Verify that explicitly disabled UseSHA option remains disabled even
110        // if all UseSHA*Intrinsics options were enabled.
111        CommandLineOptionTest.verifyOptionValueForSameVM(
112                SHAOptionsBase.USE_SHA_OPTION, "false",
113                String.format("'%s' option should be disabled if %s flag "
114                        + "set even if all UseSHA*Intrinsics were enabled",
115                        SHAOptionsBase.USE_SHA_OPTION,
116                        CommandLineOptionTest.prepareBooleanFlag(
117                            SHAOptionsBase.USE_SHA_OPTION, false)),
118                SHAOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
119                CommandLineOptionTest.prepareBooleanFlag(
120                        SHAOptionsBase.USE_SHA_OPTION, false),
121                CommandLineOptionTest.prepareBooleanFlag(
122                        SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true),
123                CommandLineOptionTest.prepareBooleanFlag(
124                        SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION, true),
125                CommandLineOptionTest.prepareBooleanFlag(
126                        SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true));
127    }
128}
129