test/hotspot/jtreg/runtime/cds/appcds/FieldLayoutFlags.java
author iklam
Thu, 07 Nov 2019 16:26:57 -0800
changeset 58978 ad157fab6bf5
permissions -rw-r--r--
8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time Reviewed-by: fparain
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58978
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     1
/*
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     4
 *
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     8
 *
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    13
 * accompanied this code).
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    14
 *
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    18
 *
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    21
 * questions.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    22
 *
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    23
 */
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    24
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    25
/*
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    26
 * @test
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    27
 * @summary VM should work even if different field layout options are chosen between dump time and run time.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    28
 * @bug 8233086
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    29
 * @requires vm.cds
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    30
 * @modules java.base/jdk.internal.misc
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    31
 * @modules java.base/jdk.internal.vm.annotation
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    32
 * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds /test/hotspot/jtreg/runtime/cds/appcds/test-classes
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    33
 * @build FieldLayoutApp
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    34
 * @run driver ClassFileInstaller -jar field_layout.jar
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    35
 *     FieldLayoutApp
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    36
 *     FieldLayoutApp$TestObject
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    37
 *     FieldLayoutApp$Base1
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    38
 *     FieldLayoutApp$Base2
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    39
 *     FieldLayoutApp$Child1
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    40
 *     FieldLayoutApp$Child2
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    41
 * @run driver FieldLayoutFlags
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    42
 */
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    43
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    44
import jdk.test.lib.Platform;
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    45
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    46
public class FieldLayoutFlags {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    47
    static final String[][] flags = {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    48
        // Dump time                             // Run time
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    49
        {},                                      {},   // All defaults. Ensure that the test itself is correct.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    50
        {"-XX:FieldsAllocationStyle=0"},         {"-XX:FieldsAllocationStyle=1"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    51
        {"-XX:FieldsAllocationStyle=0"},         {"-XX:FieldsAllocationStyle=2"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    52
        {"-XX:FieldsAllocationStyle=1"},         {"-XX:FieldsAllocationStyle=0"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    53
        {"-XX:FieldsAllocationStyle=1"},         {"-XX:FieldsAllocationStyle=2"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    54
        {"-XX:FieldsAllocationStyle=2"},         {"-XX:FieldsAllocationStyle=0"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    55
        {"-XX:FieldsAllocationStyle=2"},         {"-XX:FieldsAllocationStyle=1"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    56
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    57
        {"-XX:+CompactFields"},                  {"-XX:-CompactFields"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    58
        {"-XX:-CompactFields"},                  {"-XX:+CompactFields"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    59
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    60
        {"-XX:+EnableContended"},                {"-XX:-EnableContended"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    61
        {"-XX:-EnableContended"},                {"-XX:+EnableContended"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    62
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    63
        {"-XX:ContendedPaddingWidth=128"},       {"-XX:ContendedPaddingWidth=256"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    64
        {"-XX:ContendedPaddingWidth=256"},       {"-XX:ContendedPaddingWidth=128"},
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    65
    };
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    66
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    67
    static final String appJar = ClassFileInstaller.getJarPath("field_layout.jar");
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    68
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    69
    public static void main(String[] args) throws Exception {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    70
        for (int i = 0; i < flags.length; i += 2) {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    71
            String[] dumpFlags = flags[i+0];
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    72
            String[] runFlags  = flags[i+1];
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    73
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    74
            System.out.println("====================================================== Cases " + i + " and " + (i + 1));
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    75
            logFlags("Dump:", dumpFlags);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    76
            logFlags("Run :", runFlags);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    77
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    78
            testDump(dontRestrict(dumpFlags));
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    79
            testRun (dontRestrict(runFlags));
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    80
        }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    81
    }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    82
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    83
    static void logFlags(String which, String[] flags) {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    84
        System.out.print(which);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    85
        String prefix = " ";
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    86
        for (String s : flags) {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    87
            System.out.print(prefix);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    88
            System.out.print(s);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    89
            prefix = ", ";
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    90
        }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    91
        System.out.println();
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    92
    }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    93
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    94
    // Don't restrict @Contended to trusted classes, so we can use it in FieldLayoutApp
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    95
    static String[] dontRestrict(String args[]) {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    96
        return TestCommon.concat("-XX:-RestrictContended", args);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    97
    }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    98
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
    99
    static void testDump(String[] dumpFlags) throws Exception {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   100
        String classlist[] = new String[] {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   101
            "FieldLayoutApp",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   102
            "FieldLayoutApp$TestObject",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   103
            "FieldLayoutApp$Base1",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   104
            "FieldLayoutApp$Base2",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   105
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   106
            /*
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   107
             * Note, the following classes are not archived, and will be loaded
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   108
             * dynamically at run time. We check that their field layout is compatible with
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   109
             * their super classes, which are archived.
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   110
             */
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   111
            // "FieldLayoutApp$Child1",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   112
            // "FieldLayoutApp$Child2",
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   113
        };
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   114
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   115
        TestCommon.testDump(appJar, classlist, dumpFlags);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   116
    }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   117
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   118
    static void testRun(String[] runFlags) throws Exception {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   119
        String[] cmds = TestCommon.concat(runFlags, "-cp", appJar);
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   120
        if (Platform.isDebugBuild()) {
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   121
            cmds = TestCommon.concat(cmds, "-XX:+PrintFieldLayout");
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   122
        }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   123
        cmds = TestCommon.concat(cmds, "FieldLayoutApp");
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   124
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   125
        TestCommon.run(cmds).assertNormalExit();
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   126
    }
ad157fab6bf5 8233086: [TESTBUG] need to test field layout style difference between CDS dump time and run time
iklam
parents:
diff changeset
   127
}