test/hotspot/jtreg/runtime/appcds/VerifierTest.java
author jiangli
Mon, 21 May 2018 15:15:58 -0400
changeset 50199 83d8b3a25f25
parent 49931 840e26123940
child 51370 fbb62267e5e9
permissions -rw-r--r--
8199807: AppCDS performs overly restrictive path matching check. 8203377: Cleanup the usage of os::file_name_strcmp() in SharedPathsMiscInfo::check(). Summary: Relax CDS/AppCDS path check for modules image. Reviewed-by: iklam, ccheung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     1
/*
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
     2
 * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     4
 *
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     7
 * published by the Free Software Foundation.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     8
 *
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    13
 * accompanied this code).
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    14
 *
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    18
 *
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    21
 * questions.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    22
 *
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    23
 */
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    24
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    25
import java.io.File;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    26
import java.io.FileOutputStream;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    27
import jdk.test.lib.process.OutputAnalyzer;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    28
import java.nio.file.Files;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    29
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    30
import java.util.*;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    31
import jdk.internal.org.objectweb.asm.*;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    32
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    33
/**
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    34
 * The testsets contained in this class are executed by ./VerifierTest_*.java, so that
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    35
 * individual testsets can be executed in parallel to shorten the total time required.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    36
 */
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    37
public class VerifierTest implements Opcodes {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    38
    // Test verification settings for dumping & runtime
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    39
    static final String VFY_ALL = "-Xverify:all";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    40
    static final String VFY_REMOTE = "-Xverify:remote"; // default
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    41
    static final String VFY_NONE = "-Xverify:none";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    42
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    43
    static final String ERR =
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    44
        "ERROR: class VerifierTestC was loaded unexpectedly";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    45
    static final String MAP_FAIL =
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    46
        "shared archive file was created with less restrictive verification setting";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    47
    static final String VFY_ERR = "java.lang.VerifyError";
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
    48
    static final String PASS_RESULT = "Hi, how are you?";
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
    49
    static final String VFY_INFO_MESSAGE =
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
    50
        "All non-system classes will be verified (-Xverify:remote) during CDS dump time.";
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    51
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    52
    enum Testset1Part {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    53
        A, B
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    54
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    55
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    56
    public static void main(String[] args) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    57
        String subCaseId = args[0];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    58
        String jarName_verifier_test_tmp = "verifier_test_tmp" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    59
        String jarName_verifier_test = "verifier_test" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    60
        String jarName_greet = "greet" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    61
        String jarName_hi = "hi" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    62
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    63
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    64
        JarBuilder.build(jarName_verifier_test_tmp, "VerifierTest0", "VerifierTestA",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    65
                         "VerifierTestB", "VerifierTestC", "VerifierTestD", "VerifierTestE",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    66
                         "UnverifiableBase", "UnverifiableIntf", "UnverifiableIntfSub");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    67
        JarBuilder.build(jarName_greet, "Greet");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    68
        JarBuilder.build(jarName_hi, "Hi", "Hi$MyClass");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    69
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    70
        File dir = new File(System.getProperty("test.classes", "."));
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    71
        File jarSrcFile = new File(dir, jarName_verifier_test_tmp + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    72
        File jarFile = new File(dir, jarName_verifier_test + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    73
        String jar = jarFile.getPath();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    74
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    75
        if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    76
            createTestJarFile(jarSrcFile, jarFile);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    77
        } else {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    78
            System.out.println("Already up-to-date: " + jarFile);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    79
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    80
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    81
        String noAppClasses[] = TestCommon.list("");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    82
        String appClasses[] = TestCommon.list("UnverifiableBase",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    83
                                              "UnverifiableIntf",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    84
                                              "UnverifiableIntfSub",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    85
                                              "VerifierTestA",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    86
                                              "VerifierTestB",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    87
                                              "VerifierTestC",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    88
                                              "VerifierTestD",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    89
                                              "VerifierTestE",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    90
                                              "VerifierTest0");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    91
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    92
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    93
        switch (subCaseId) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    94
        case "0":         testset_0(jar, noAppClasses, appClasses);                 return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    95
        case "1A":        testset_1(jar, noAppClasses, appClasses, Testset1Part.A); return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    96
        case "1B":        testset_1(jar, noAppClasses, appClasses, Testset1Part.B); return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    97
        case "2":         testset_2(jarName_greet, jarName_hi);                   return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    98
        default:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    99
            throw new RuntimeException("Unknown option: " + subCaseId);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   100
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   101
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   102
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   103
    static void testset_0(String jar, String[] noAppClasses, String[] appClasses) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   104
        // Dumping should fail if the IgnoreUnverifiableClassesDuringDump
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   105
        // option is not enabled.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   106
        OutputAnalyzer output = TestCommon.dump(jar, appClasses,
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   107
                            "-XX:+UnlockDiagnosticVMOptions",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   108
                            "-XX:-IgnoreUnverifiableClassesDuringDump");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   109
        output.shouldContain("Please remove the unverifiable classes");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   110
        output.shouldHaveExitValue(1);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   111
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   112
        // By default, bad classes should be ignored during dumping.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   113
        TestCommon.testDump(jar, appClasses);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   114
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   115
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   116
    static void checkRuntimeOutput(OutputAnalyzer output, String expected) throws Exception {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   117
        output.shouldContain(expected);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   118
        if (expected.equals(PASS_RESULT) ||
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   119
            expected.equals(VFY_ERR)) {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   120
            output.shouldHaveExitValue(0);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   121
        } else {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   122
            output.shouldNotHaveExitValue(0);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   123
        }
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   124
    }
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   125
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   126
    static void testset_1(String jar, String[] noAppClasses, String[] appClasses, Testset1Part part)
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   127
        throws Exception
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   128
    {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   129
        String config[][] = {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   130
            // {dump_list, dumptime_verification_setting,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   131
            //  runtime_verification_setting, expected_output_str},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   132
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   133
            // Dump app/ext with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   134
            {"app",   VFY_REMOTE, VFY_REMOTE, VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   135
            {"app",   VFY_REMOTE, VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   136
            {"app",   VFY_REMOTE, VFY_NONE,   ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   137
            // Dump app/ext with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   138
            {"app",   VFY_ALL,    VFY_REMOTE, VFY_ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   139
            {"app",   VFY_ALL,    VFY_ALL,    VFY_ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   140
            {"app",   VFY_ALL,    VFY_NONE,   ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   141
            // Dump app/ext with -Xverify:none
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   142
            {"app",   VFY_NONE,   VFY_REMOTE, VFY_ERR},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   143
            {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   144
            {"app",   VFY_NONE,   VFY_NONE,   ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   145
            // Dump sys only with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   146
            {"noApp", VFY_REMOTE, VFY_REMOTE, VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   147
            {"noApp", VFY_REMOTE, VFY_ALL,    VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   148
            {"noApp", VFY_REMOTE, VFY_NONE,   ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   149
            // Dump sys only with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   150
            {"noApp", VFY_ALL, VFY_REMOTE,    VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   151
            {"noApp", VFY_ALL, VFY_ALL,       VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   152
            {"noApp", VFY_ALL, VFY_NONE,      ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   153
            // Dump sys only with -Xverify:none
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   154
            {"noApp", VFY_NONE, VFY_REMOTE,   VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   155
            {"noApp", VFY_NONE, VFY_ALL,      VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   156
            {"noApp", VFY_NONE, VFY_NONE,     ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   157
        };
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   158
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   159
        int loop_start, loop_stop;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   160
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   161
        // Further break down testset_1 into two parts (to be invoked from VerifierTest_1A.java
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   162
        // and VerifierTest_1B.java) to improve parallel test execution time.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   163
        switch (part) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   164
        case A:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   165
            loop_start = 0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   166
            loop_stop  = 9;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   167
            break;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   168
        case B:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   169
        default:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   170
            assert part == Testset1Part.B;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   171
            loop_start = 9;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   172
            loop_stop  = config.length;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   173
            break;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   174
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   175
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   176
        String prev_dump_setting = "";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   177
        for (int i = loop_start; i < loop_stop; i ++) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   178
            String dump_list[] = config[i][0].equals("app") ? appClasses :
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   179
                noAppClasses;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   180
            String dump_setting = config[i][1];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   181
            String runtime_setting = config[i][2];
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   182
            String expected_output_str = config[i][3];
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   183
            System.out.println("Test case [" + i + "]: dumping " + config[i][0] +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   184
                               " with " + dump_setting +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   185
                               ", run with " + runtime_setting);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   186
            if (!dump_setting.equals(prev_dump_setting)) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   187
                OutputAnalyzer dumpOutput = TestCommon.dump(
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   188
                                                            jar, dump_list, dump_setting,
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   189
                                                            // FIXME: the following options are for working around a GC
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   190
                                                            // issue - assert failure when dumping archive with the -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   191
                                                            "-Xms256m",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   192
                                                            "-Xmx256m");
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   193
                if (dump_setting.equals(VFY_NONE) &&
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   194
                    runtime_setting.equals(VFY_REMOTE)) {
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   195
                    dumpOutput.shouldContain(VFY_INFO_MESSAGE);
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   196
                }
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   197
            }
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   198
            TestCommon.run("-cp", jar,
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   199
                           runtime_setting,
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   200
                           "VerifierTest0")
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   201
                .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   202
            prev_dump_setting = dump_setting;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   203
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   204
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   205
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   206
    static void testset_2(String jarName_greet, String jarName_hi) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   207
        String appClasses[];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   208
        String jar;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   209
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   210
        // The following section is for testing the scenarios where
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   211
        // the classes are verifiable during dump time.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   212
        appClasses = TestCommon.list("Hi",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   213
                                     "Greet",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   214
                                     "Hi$MyClass");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   215
        jar = TestCommon.getTestJar(jarName_hi + ".jar") + File.pathSeparator +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   216
            TestCommon.getTestJar(jarName_greet + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   217
        String config2[][] = {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   218
            // {dump_list, dumptime_verification_setting,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   219
            //  runtime_verification_setting, expected_output_str},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   220
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   221
            // Dump app/ext with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   222
            {"app",   VFY_REMOTE, VFY_REMOTE, PASS_RESULT},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   223
            {"app",   VFY_REMOTE, VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   224
            {"app",   VFY_REMOTE, VFY_NONE,   PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   225
            // Dump app/ext with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   226
            {"app",   VFY_ALL,    VFY_REMOTE, PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   227
            {"app",   VFY_ALL,    VFY_ALL,    PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   228
            {"app",   VFY_ALL,    VFY_NONE,   PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   229
            // Dump app/ext with -Xverify:none
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   230
            {"app",   VFY_NONE,   VFY_REMOTE, PASS_RESULT},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   231
            {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   232
            {"app",   VFY_NONE,   VFY_NONE,   PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   233
        };
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   234
        String prev_dump_setting = "";
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   235
        for (int i = 0; i < config2.length; i ++) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   236
            // config2[i][0] is always set to "app" in this test
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   237
            String dump_setting = config2[i][1];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   238
            String runtime_setting = config2[i][2];
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   239
            String expected_output_str = config2[i][3];
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   240
            System.out.println("Test case [" + i + "]: dumping " + config2[i][0] +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   241
                               " with " + dump_setting +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   242
                               ", run with " + runtime_setting);
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   243
            if (!dump_setting.equals(prev_dump_setting)) {
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   244
                OutputAnalyzer dumpOutput = TestCommon.dump(
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   245
                                                            jar, appClasses, dump_setting,
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   246
                                                            // FIXME: the following options are for working around a GC
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   247
                                                            // issue - assert failure when dumping archive with the -Xverify:all
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   248
                                                            "-Xms256m",
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   249
                                                            "-Xmx256m");
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   250
                if (dump_setting.equals(VFY_NONE) &&
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   251
                    runtime_setting.equals(VFY_REMOTE)) {
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   252
                    dumpOutput.shouldContain(VFY_INFO_MESSAGE);
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   253
                }
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   254
            }
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   255
            TestCommon.run("-cp", jar,
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   256
                           runtime_setting,
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   257
                           "Hi")
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   258
                .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   259
           prev_dump_setting = dump_setting;
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   260
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   261
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   262
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   263
    static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   264
        jarFile.delete();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   265
        Files.copy(jarSrcFile.toPath(), jarFile.toPath());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   266
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   267
        File dir = new File(System.getProperty("test.classes", "."));
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   268
        File outdir = new File(dir, "verifier_test_classes");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   269
        outdir.mkdir();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   270
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   271
        writeClassFile(new File(outdir, "UnverifiableBase.class"), makeUnverifiableBase());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   272
        writeClassFile(new File(outdir, "UnverifiableIntf.class"), makeUnverifiableIntf());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   273
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   274
        JarBuilder.update(jarFile.getPath(), outdir.getPath());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   275
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   276
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   277
    static void writeClassFile(File file, byte bytecodes[]) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   278
        try (FileOutputStream fos = new FileOutputStream(file)) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   279
            fos.write(bytecodes);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   280
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   281
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   282
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   283
    // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableBase.class
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   284
    static byte[] makeUnverifiableBase() throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   285
        ClassWriter cw = new ClassWriter(0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   286
        FieldVisitor fv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   287
        MethodVisitor mv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   288
        AnnotationVisitor av0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   289
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   290
        cw.visit(V1_8, ACC_SUPER, "UnverifiableBase", null, "java/lang/Object", null);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   291
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   292
            fv = cw.visitField(ACC_FINAL + ACC_STATIC, "x", "LVerifierTest;", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   293
            fv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   294
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   295
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   296
            mv = cw.visitMethod(0, "<init>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   297
            mv.visitCode();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   298
            mv.visitVarInsn(ALOAD, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   299
            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   300
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   301
            mv.visitMaxs(1, 1);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   302
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   303
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   304
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   305
            mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   306
            mv.visitCode();
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   307
            mv.visitTypeInsn(NEW, "VerifierTest0");
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   308
            mv.visitInsn(DUP);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   309
            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   310
            mv.visitFieldInsn(PUTSTATIC, "UnverifiableBase", "x", "LVerifierTest;");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   311
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   312
            mv.visitMaxs(2, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   313
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   314
        }
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   315
        addBadMethod(cw);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   316
        cw.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   317
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   318
        return cw.toByteArray();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   319
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   320
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   321
    // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableIntf.class
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   322
    static byte[] makeUnverifiableIntf() throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   323
        ClassWriter cw = new ClassWriter(0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   324
        FieldVisitor fv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   325
        MethodVisitor mv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   326
        AnnotationVisitor av0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   327
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   328
        cw.visit(V1_8, ACC_ABSTRACT + ACC_INTERFACE, "UnverifiableIntf", null, "java/lang/Object", null);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   329
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   330
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   331
            fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "x", "LVerifierTest0;", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   332
            fv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   333
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   334
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   335
            mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   336
            mv.visitCode();
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   337
            mv.visitTypeInsn(NEW, "VerifierTest0");
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   338
            mv.visitInsn(DUP);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   339
            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   340
            mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", "LVerifierTest0;");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   341
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   342
            mv.visitMaxs(2, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   343
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   344
        }
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   345
        addBadMethod(cw);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   346
        cw.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   347
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   348
        return cw.toByteArray();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   349
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   350
48973
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   351
    // Add a bad method to make the class fail verification.
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   352
    static void addBadMethod(ClassWriter cw) throws Exception {
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   353
        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "bad", "()V", null, null);
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   354
        mv.visitCode();
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   355
        mv.visitInsn(ARETURN); //  java.lang.VerifyError: Operand stack underflow
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   356
        mv.visitMaxs(2, 2);
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   357
        mv.visitEnd();
7b9fcae23a16 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: actual receiver must be subclass of static receiver klass
ccheung
parents: 48138
diff changeset
   358
    }
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   359
}