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