TestUseRTMDeoptOptionOnSupportedConfig.java revision 12158:0fe2815ffa74
155682Smarkm/*
2102644Snectar * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
355682Smarkm * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
455682Smarkm *
555682Smarkm * This code is free software; you can redistribute it and/or modify it
655682Smarkm * under the terms of the GNU General Public License version 2 only, as
755682Smarkm * published by the Free Software Foundation.
855682Smarkm *
955682Smarkm * This code is distributed in the hope that it will be useful, but WITHOUT
1055682Smarkm * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1155682Smarkm * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1255682Smarkm * version 2 for more details (a copy is included in the LICENSE file that
1355682Smarkm * accompanied this code).
1455682Smarkm *
1555682Smarkm * You should have received a copy of the GNU General Public License version
1655682Smarkm * 2 along with this work; if not, write to the Free Software Foundation,
1755682Smarkm * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1855682Smarkm *
1955682Smarkm * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2055682Smarkm * or visit www.oracle.com if you need additional information or have any
2155682Smarkm * questions.
2255682Smarkm */
2355682Smarkm
2455682Smarkm/**
2555682Smarkm * @test
2655682Smarkm * @bug 8031320
2755682Smarkm * @summary Verify UseRTMDeopt option processing on CPUs with rtm support
2855682Smarkm *          when rtm locking is supported by VM.
2955682Smarkm * @library /test/lib /
3055682Smarkm * @modules java.base/jdk.internal.misc
3155682Smarkm *          java.management
3255682Smarkm *
3355682Smarkm * @build sun.hotspot.WhiteBox
3455682Smarkm * @run driver ClassFileInstaller sun.hotspot.WhiteBox
3555682Smarkm *                                sun.hotspot.WhiteBox$WhiteBoxPermission
3655682Smarkm * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
3755682Smarkm *                   -XX:+WhiteBoxAPI
38178825Sdfr *                   compiler.rtm.cli.TestUseRTMDeoptOptionOnSupportedConfig
3955682Smarkm */
4055682Smarkm
4155682Smarkmpackage compiler.rtm.cli;
4255682Smarkm
4355682Smarkmimport compiler.testlibrary.rtm.predicate.SupportedCPU;
4455682Smarkmimport compiler.testlibrary.rtm.predicate.SupportedOS;
4572445Sassarimport compiler.testlibrary.rtm.predicate.SupportedVM;
4672445Sassarimport jdk.test.lib.process.ExitCode;
47178825Sdfrimport jdk.test.lib.cli.CommandLineOptionTest;
4872445Sassarimport jdk.test.lib.cli.predicate.AndPredicate;
4972445Sassar
5055682Smarkmpublic class TestUseRTMDeoptOptionOnSupportedConfig
5155682Smarkm        extends CommandLineOptionTest {
5255682Smarkm    private static final String DEFAULT_VALUE = "false";
5355682Smarkm
5455682Smarkm    private TestUseRTMDeoptOptionOnSupportedConfig() {
5572445Sassar        super(new AndPredicate(new SupportedCPU(), new SupportedOS(), new SupportedVM()));
5655682Smarkm    }
5790926Snectar
5890926Snectar    @Override
5955682Smarkm    public void runTestCases() throws Throwable {
6090926Snectar        String shouldPassMessage = " JVM should startup with option '"
6155682Smarkm                + "-XX:+UseRTMDeopt' without any warnings";
6255682Smarkm        // verify that option could be turned on
6355682Smarkm        CommandLineOptionTest.verifySameJVMStartup(
6455682Smarkm                null, null, shouldPassMessage, shouldPassMessage, ExitCode.OK,
6555682Smarkm                "-XX:+UseRTMDeopt");
6655682Smarkm        shouldPassMessage = " JVM should startup with option '"
6755682Smarkm                + "-XX:-UseRTMDeopt' without any warnings";
6855682Smarkm        // verify that option could be turned off
6955682Smarkm        CommandLineOptionTest.verifySameJVMStartup(
7090926Snectar                null, null, shouldPassMessage, shouldPassMessage, ExitCode.OK,
7155682Smarkm                "-XX:-UseRTMDeopt");
7255682Smarkm        String defValMessage = String.format("UseRTMDeopt should have '%s'"
7355682Smarkm                                    + "default value",
7455682Smarkm                        TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE);
7555682Smarkm        // verify default value
7655682Smarkm        CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt",
7755682Smarkm                TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE,
7855682Smarkm                defValMessage);
79178825Sdfr        // verify default value
8055682Smarkm        CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt",
8155682Smarkm                TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE,
8290926Snectar                defValMessage,
8355682Smarkm                CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS,
8455682Smarkm                "-XX:+UseRTMLocking");
8572445Sassar        // verify that option is off when UseRTMLocking is off
8655682Smarkm        CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt",
8755682Smarkm                "false", "UseRTMDeopt should be off when UseRTMLocking is off",
8855682Smarkm                CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS,
8955682Smarkm                "-XX:-UseRTMLocking", "-XX:+UseRTMDeopt");
9055682Smarkm        // verify that option could be turned on
9155682Smarkm        CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", "true",
9290926Snectar                "UseRTMDeopt should be on when UseRTMLocking is on and "
9355682Smarkm                        + "'-XX:+UseRTMDeopt' flag set",
9455682Smarkm                CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS,
9555682Smarkm                "-XX:+UseRTMLocking", "-XX:+UseRTMDeopt");
9655682Smarkm    }
9755682Smarkm
9855682Smarkm    public static void main(String args[]) throws Throwable {
9955682Smarkm        new TestUseRTMDeoptOptionOnSupportedConfig().test();
10055682Smarkm    }
10155682Smarkm}
10255682Smarkm