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 24 import jdk.test.lib.ExitCode; 25 import jdk.test.lib.Platform; 26 import jdk.test.lib.cli.CommandLineOptionTest; 27 import jdk.test.lib.cli.predicate.AndPredicate; 28 29 /** 30 * Generic test case for SHA-related options targeted to SPARC CPUs which 31 * support instructions required by the tested option. 32 */ 33 public class GenericTestCaseForSupportedSparcCPU extends 34 SHAOptionsBase.TestCase { 35 public GenericTestCaseForSupportedSparcCPU(String optionName) { 36 super(optionName, new AndPredicate(Platform::isSparc, 37 SHAOptionsBase.getPredicateForOption(optionName))); 38 } 39 40 @Override 41 protected void verifyWarnings() throws Throwable { 42 43 String shouldPassMessage = String.format("JVM should start with option" 44 + " '%s' without any warnings", optionName); 45 // Verify that there are no warning when option is explicitly enabled. 46 CommandLineOptionTest.verifySameJVMStartup(null, new String[] { 47 SHAOptionsBase.getWarningForUnsupportedCPU(optionName) 48 }, shouldPassMessage, shouldPassMessage, ExitCode.OK, 49 CommandLineOptionTest.prepareBooleanFlag(optionName, true)); 50 51 // Verify that option could be disabled even if +UseSHA was passed to 52 // JVM. 53 CommandLineOptionTest.verifySameJVMStartup(null, new String[] { 54 SHAOptionsBase.getWarningForUnsupportedCPU(optionName) 55 }, shouldPassMessage, String.format("It should be able to " 56 + "disable option '%s' even if %s was passed to JVM", 57 optionName, CommandLineOptionTest.prepareBooleanFlag( 58 SHAOptionsBase.USE_SHA_OPTION, true)), 59 ExitCode.OK, 60 CommandLineOptionTest.prepareBooleanFlag( 61 SHAOptionsBase.USE_SHA_OPTION, true), 62 CommandLineOptionTest.prepareBooleanFlag(optionName, false)); 63 64 // Verify that it is possible to enable the tested option and disable 65 // all SHA intrinsics via -UseSHA without any warnings. 66 CommandLineOptionTest.verifySameJVMStartup(null, new String[] { 67 SHAOptionsBase.getWarningForUnsupportedCPU(optionName) 68 }, shouldPassMessage, String.format("It should be able to " 69 + "enable option '%s' even if %s was passed to JVM", 70 optionName, CommandLineOptionTest.prepareBooleanFlag( 71 SHAOptionsBase.USE_SHA_OPTION, false)), 72 ExitCode.OK, 73 CommandLineOptionTest.prepareBooleanFlag( 74 SHAOptionsBase.USE_SHA_OPTION, false), 75 CommandLineOptionTest.prepareBooleanFlag(optionName, true)); 76 } 77 78 @Override 79 protected void verifyOptionValues() throws Throwable { 80 // Verify that "It should be able to disable option " 81 82 CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", 83 String.format("Option '%s' should be enabled by default", 84 optionName)); 85 86 // Verify that it is possible to explicitly enable the option. 87 CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", 88 String.format("Option '%s' was set to have value 'true'", 89 optionName), 90 CommandLineOptionTest.prepareBooleanFlag(optionName, true)); 91 92 // Verify that it is possible to explicitly disable the option. 93 CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", 94 String.format("Option '%s' was set to have value 'false'", 95 optionName), 96 CommandLineOptionTest.prepareBooleanFlag(optionName, false)); 97 98 // verify that option is disabled when -UseSHA was passed to JVM. 99 CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", 100 String.format("Option '%s' should have value 'false' when %s" 101 + " flag set to JVM", optionName, 102 CommandLineOptionTest.prepareBooleanFlag( 103 SHAOptionsBase.USE_SHA_OPTION, false)), 104 CommandLineOptionTest.prepareBooleanFlag(optionName, true), 105 CommandLineOptionTest.prepareBooleanFlag( 106 SHAOptionsBase.USE_SHA_OPTION, false)); 107 108 // Verify that it is possible to explicitly disable the tested option 109 // even if +UseSHA was passed to JVM. 110 CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", 111 String.format("Option '%s' should have value 'false' if set so" 112 + " even if %s flag set to JVM", optionName, 113 CommandLineOptionTest.prepareBooleanFlag( 114 SHAOptionsBase.USE_SHA_OPTION, true)), 115 CommandLineOptionTest.prepareBooleanFlag( 116 SHAOptionsBase.USE_SHA_OPTION, true), 117 CommandLineOptionTest.prepareBooleanFlag(optionName, false)); 118 } 119 }