1 /*
  2  * Copyright (c) 2014, 2020, 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 package compiler.intrinsics.sha.cli.testcases;
 25 
 26 import compiler.intrinsics.sha.cli.DigestOptionsBase;
 27 import jdk.test.lib.process.ExitCode;
 28 import jdk.test.lib.Platform;
 29 import jdk.test.lib.cli.CommandLineOptionTest;
 30 import jdk.test.lib.cli.predicate.NotPredicate;
 31 import jdk.test.lib.cli.predicate.OrPredicate;
 32 
 33 /**
 34  * Generic test case for SHA-related options targeted to any CPU except
 35  * AArch64, PPC, S390x, and X86.
 36  */
 37 public class GenericTestCaseForOtherCPU extends
 38         DigestOptionsBase.TestCase {
 39 
 40     final private boolean checkUseSHA;
 41 
 42     public GenericTestCaseForOtherCPU(String optionName) {
 43         this(optionName, true);
 44     }
 45 
 46     public GenericTestCaseForOtherCPU(String optionName, boolean checkUseSHA) {
 47         // Execute the test case on any CPU except AArch64, PPC, S390x, and X86.
 48         super(optionName, new NotPredicate(
 49                               new OrPredicate(Platform::isAArch64,

 50                               new OrPredicate(Platform::isS390x,
 51                               new OrPredicate(Platform::isPPC,
 52                               new OrPredicate(Platform::isX64,
 53                                               Platform::isX86))))));
 54 
 55         this.checkUseSHA = checkUseSHA;
 56     }
 57 
 58     @Override
 59     protected void verifyWarnings() throws Throwable {
 60         String shouldPassMessage = String.format("JVM should start with "
 61                 + "option '%s' without any warnings", optionName);
 62         // Verify that on non-x86 and non-AArch64 CPU usage of SHA-related
 63         // options will not cause any warnings.
 64         CommandLineOptionTest.verifySameJVMStartup(null,
 65                 new String[] { ".*" + optionName + ".*" }, shouldPassMessage,
 66                 shouldPassMessage, ExitCode.OK,
 67                 DigestOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
 68                 CommandLineOptionTest.prepareBooleanFlag(optionName, true));
 69 
 70         CommandLineOptionTest.verifySameJVMStartup(null,
 71                 new String[] { ".*" + optionName + ".*" }, shouldPassMessage,
 72                 shouldPassMessage, ExitCode.OK,
 73                 DigestOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
 74                 CommandLineOptionTest.prepareBooleanFlag(optionName, false));
 75     }
 76 
 77     @Override
 78     protected void verifyOptionValues() throws Throwable {
 79         // Verify that option is disabled by default.
 80         CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
 81                 String.format("Option '%s' should be disabled by default",
 82                         optionName),
 83                 DigestOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS);
 84 
 85         // Verify that option is disabled even if it was explicitly enabled
 86         // using CLI options.
 87         CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
 88                 String.format("Option '%s' should be off on unsupported "
 89                         + "CPU even if set to true directly", optionName),
 90                 DigestOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
 91                 CommandLineOptionTest.prepareBooleanFlag(optionName, true));
 92 
 93         if (checkUseSHA) {
 94             // Verify that option is disabled when it explicitly disabled
 95             // using CLI options.
 96             CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
 97                     String.format("Option '%s' should be off on unsupported CPU"
 98                             + " even if '%s' flag set to JVM", optionName,
 99                             CommandLineOptionTest.prepareBooleanFlag(
100                             DigestOptionsBase.USE_SHA_OPTION, true)),
101                     DigestOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
102                     CommandLineOptionTest.prepareBooleanFlag(optionName, false));
103         }
104     }
105 }
--- EOF ---