| /* |
| * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| import intrinsics.Verifier; |
| import sun.hotspot.WhiteBox; |
| |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.util.Objects; |
| import java.util.Properties; |
| import java.util.function.BooleanSupplier; |
| |
| /** |
| * Base class for sanity tests on SHA intrinsics support. |
| */ |
| public class SHASanityTestBase { |
| protected static final String SHA1_INTRINSIC_ID |
| = "_sha_implCompress"; |
| protected static final String SHA256_INTRINSIC_ID |
| = "_sha2_implCompress"; |
| protected static final String SHA512_INTRINSIC_ID |
| = "_sha5_implCompress"; |
| protected static final String MB_INTRINSIC_ID |
| = "_digestBase_implCompressMB"; |
| |
| private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); |
| private static final int MSG_SIZE = 1024; |
| private static final int OFFSET = 0; |
| private static final int ITERATIONS = 10000; |
| private static final int WARMUP_ITERATIONS = 1; |
| private static final String PROVIDER = "SUN"; |
| |
| private final BooleanSupplier predicate; |
| private final String intrinsicID; |
| |
| /** |
| * Construct the new test on intrinsic with ID {@code intrinsicID}, |
| * which is expected to be emitted if {@code predicate} is evaluated to |
| * {@code true}. |
| * |
| * @param predicate The predicate indicating if the intrinsic is expected to |
| * be used. |
| * @param intrinsicID The ID of the intrinsic to be tested. |
| */ |
| protected SHASanityTestBase(BooleanSupplier predicate, String intrinsicID) { |
| this.predicate = predicate; |
| this.intrinsicID = intrinsicID; |
| } |
| |
| /** |
| * Run the test and dump properties to file. |
| * |
| * @throws Exception when something went wrong. |
| */ |
| public final void test() throws Exception { |
| String algorithm = Objects.requireNonNull( |
| System.getProperty("algorithm"), |
| "Algorithm name should be specified."); |
| |
| dumpProperties(); |
| |
| TestSHA.testSHA(SHASanityTestBase.PROVIDER, algorithm, |
| SHASanityTestBase.MSG_SIZE, SHASanityTestBase.OFFSET, |
| SHASanityTestBase.ITERATIONS, |
| SHASanityTestBase.WARMUP_ITERATIONS); |
| } |
| |
| /** |
| * Dump properties containing information about the tested intrinsic name |
| * and whether or not is should be used to the file |
| * <LogFile value>.verify.properties. |
| * |
| * @throws IOException when something went wrong during dumping to file. |
| */ |
| private void dumpProperties() throws IOException { |
| Properties properties = new Properties(); |
| properties.setProperty(Verifier.INTRINSIC_NAME_PROPERTY, intrinsicID); |
| properties.setProperty(Verifier.INTRINSIC_IS_EXPECTED_PROPERTY, |
| String.valueOf(predicate.getAsBoolean())); |
| |
| String logFileName |
| = SHASanityTestBase.WHITE_BOX.getStringVMFlag("LogFile"); |
| FileOutputStream fileOutputStream = new FileOutputStream(logFileName |
| + Verifier.PROPERTY_FILE_SUFFIX); |
| |
| properties.store(fileOutputStream, null); |
| fileOutputStream.close(); |
| } |
| } |