test/hotspot/jtreg/runtime/appcds/VerifierTest.java
author hseigel
Wed, 20 Feb 2019 13:21:36 -0500
changeset 53853 7ca9e625d6b2
parent 52361 cefc50af3ee7
child 54607 b6db97903b69
permissions -rw-r--r--
8214719: Deprecate -Xverify:none option Summary: Deprecate -Xverify:none and -noverify and remove them from tests Reviewed-by: dholmes, mikael
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
/*
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
     2
 * Copyright (c) 2014, 2019, 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
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
    41
    static final String VFY_NONE = "-XX:-BytecodeVerificationRemote, -XX:-BytecodeVerificationLocal";
48138
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.";
51370
fbb62267e5e9 8208705: [TESTBUG] The -Xlog:cds,cds+hashtables vm option is not always required for appcds tests
ccheung
parents: 49931
diff changeset
    51
    static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables";
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    52
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    53
    enum Testset1Part {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    54
        A, B
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    57
    public static void main(String[] args) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    58
        String subCaseId = args[0];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    59
        String jarName_verifier_test_tmp = "verifier_test_tmp" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    60
        String jarName_verifier_test = "verifier_test" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    61
        String jarName_greet = "greet" + "_" + subCaseId;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    62
        String jarName_hi = "hi" + "_" + subCaseId;
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    65
        JarBuilder.build(jarName_verifier_test_tmp, "VerifierTest0", "VerifierTestA",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    66
                         "VerifierTestB", "VerifierTestC", "VerifierTestD", "VerifierTestE",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    67
                         "UnverifiableBase", "UnverifiableIntf", "UnverifiableIntfSub");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    68
        JarBuilder.build(jarName_greet, "Greet");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    69
        JarBuilder.build(jarName_hi, "Hi", "Hi$MyClass");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    70
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    71
        File dir = new File(System.getProperty("test.classes", "."));
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    72
        File jarSrcFile = new File(dir, jarName_verifier_test_tmp + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    73
        File jarFile = new File(dir, jarName_verifier_test + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    74
        String jar = jarFile.getPath();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    75
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    76
        if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    77
            createTestJarFile(jarSrcFile, jarFile);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    78
        } else {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    79
            System.out.println("Already up-to-date: " + jarFile);
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    82
        String noAppClasses[] = TestCommon.list("");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    83
        String appClasses[] = TestCommon.list("UnverifiableBase",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    84
                                              "UnverifiableIntf",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    85
                                              "UnverifiableIntfSub",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    86
                                              "VerifierTestA",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    87
                                              "VerifierTestB",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    88
                                              "VerifierTestC",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    89
                                              "VerifierTestD",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    90
                                              "VerifierTestE",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    91
                                              "VerifierTest0");
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    94
        switch (subCaseId) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    95
        case "0":         testset_0(jar, noAppClasses, appClasses);                 return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    96
        case "1A":        testset_1(jar, noAppClasses, appClasses, Testset1Part.A); return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    97
        case "1B":        testset_1(jar, noAppClasses, appClasses, Testset1Part.B); return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    98
        case "2":         testset_2(jarName_greet, jarName_hi);                   return;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
    99
        default:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   100
            throw new RuntimeException("Unknown option: " + subCaseId);
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   104
    static void testset_0(String jar, String[] noAppClasses, String[] appClasses) throws Exception {
52361
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   105
        // Unverifiable classes won't be included in the CDS archive.
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   106
        // Dumping should not fail.
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   107
        OutputAnalyzer output = TestCommon.dump(jar, appClasses);
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   108
        output.shouldHaveExitValue(0);
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   109
        if (output.getStdout().contains("Loading clases to share")) {
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   110
            // last entry in appClasses[] is a verifiable class
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   111
            for (int i = 0; i < (appClasses.length - 1); i++) {
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   112
                output.shouldContain("Verification failed for " + appClasses[i]);
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   113
                output.shouldContain("Removed error class: " + appClasses[i]);
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   114
            }
cefc50af3ee7 8213000: Obsolete the IgnoreUnverifiableClassesDuringDump vm option
ccheung
parents: 51370
diff changeset
   115
        }
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   116
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   117
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   118
    static void checkRuntimeOutput(OutputAnalyzer output, String expected) throws Exception {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   119
        output.shouldContain(expected);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   120
        if (expected.equals(PASS_RESULT) ||
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   121
            expected.equals(VFY_ERR)) {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   122
            output.shouldHaveExitValue(0);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   123
        } else {
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   124
            output.shouldNotHaveExitValue(0);
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   125
        }
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   126
    }
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   127
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   128
    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
   129
        throws Exception
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   130
    {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   131
        String config[][] = {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   132
            // {dump_list, dumptime_verification_setting,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   133
            //  runtime_verification_setting, expected_output_str},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   134
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   135
            // Dump app/ext with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   136
            {"app",   VFY_REMOTE, VFY_REMOTE, VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   137
            {"app",   VFY_REMOTE, VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   138
            {"app",   VFY_REMOTE, VFY_NONE,   ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   139
            // Dump app/ext with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   140
            {"app",   VFY_ALL,    VFY_REMOTE, VFY_ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   141
            {"app",   VFY_ALL,    VFY_ALL,    VFY_ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   142
            {"app",   VFY_ALL,    VFY_NONE,   ERR },
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   143
            // Dump app/ext with verifier turned off
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   144
            {"app",   VFY_NONE,   VFY_REMOTE, VFY_ERR},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   145
            {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   146
            {"app",   VFY_NONE,   VFY_NONE,   ERR },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   147
            // Dump sys only with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   148
            {"noApp", VFY_REMOTE, VFY_REMOTE, VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   149
            {"noApp", VFY_REMOTE, VFY_ALL,    VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   150
            {"noApp", VFY_REMOTE, VFY_NONE,   ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   151
            // Dump sys only with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   152
            {"noApp", VFY_ALL, VFY_REMOTE,    VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   153
            {"noApp", VFY_ALL, VFY_ALL,       VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   154
            {"noApp", VFY_ALL, VFY_NONE,      ERR},
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   155
            // Dump sys only with verifier turned off
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   156
            {"noApp", VFY_NONE, VFY_REMOTE,   VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   157
            {"noApp", VFY_NONE, VFY_ALL,      VFY_ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   158
            {"noApp", VFY_NONE, VFY_NONE,     ERR},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   159
        };
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
        int loop_start, loop_stop;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   162
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   163
        // 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
   164
        // and VerifierTest_1B.java) to improve parallel test execution time.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   165
        switch (part) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   166
        case A:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   167
            loop_start = 0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   168
            loop_stop  = 9;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   169
            break;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   170
        case B:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   171
        default:
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   172
            assert part == Testset1Part.B;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   173
            loop_start = 9;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   174
            loop_stop  = config.length;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   175
            break;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   176
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   177
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   178
        String prev_dump_setting = "";
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   179
        for (int i = loop_start; i < loop_stop; i ++) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   180
            String dump_list[] = config[i][0].equals("app") ? appClasses :
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   181
                noAppClasses;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   182
            String dump_setting = config[i][1];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   183
            String runtime_setting = config[i][2];
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   184
            String expected_output_str = config[i][3];
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   185
            System.out.println("Test case [" + i + "]: dumping " + config[i][0] +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   186
                               " with " + dump_setting +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   187
                               ", run with " + runtime_setting);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   188
            if (!dump_setting.equals(prev_dump_setting)) {
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   189
                String dump_arg1;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   190
                String dump_arg2;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   191
                // Need to break this into two separate arguments.
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   192
                if (dump_setting.equals(VFY_NONE)) {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   193
                    dump_arg1 = "-XX:-BytecodeVerificationRemote";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   194
                    dump_arg2 = "-XX:-BytecodeVerificationLocal";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   195
                } else {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   196
                    // Redundant args should be harmless.
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   197
                    dump_arg1 = dump_arg2 = dump_setting;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   198
                }
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   199
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   200
                OutputAnalyzer dumpOutput = TestCommon.dump(
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   201
                                                            jar, dump_list, dump_arg1, dump_arg2,
51370
fbb62267e5e9 8208705: [TESTBUG] The -Xlog:cds,cds+hashtables vm option is not always required for appcds tests
ccheung
parents: 49931
diff changeset
   202
                                                            CDS_LOGGING,
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   203
                                                            // FIXME: the following options are for working around a GC
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   204
                                                            // issue - assert failure when dumping archive with the -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   205
                                                            "-Xms256m",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   206
                                                            "-Xmx256m");
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   207
                if (dump_setting.equals(VFY_NONE) &&
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   208
                    runtime_setting.equals(VFY_REMOTE)) {
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   209
                    dumpOutput.shouldContain(VFY_INFO_MESSAGE);
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   210
                }
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   211
            }
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   212
            String runtime_arg1;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   213
            String runtime_arg2;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   214
            if (runtime_setting.equals(VFY_NONE)) {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   215
                runtime_arg1 = "-XX:-BytecodeVerificationRemote";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   216
                runtime_arg2 = "-XX:-BytecodeVerificationLocal";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   217
            } else {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   218
                // Redundant args should be harmless.
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   219
                runtime_arg1 = runtime_arg2 = runtime_setting;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   220
            }
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   221
            TestCommon.run("-cp", jar,
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   222
                           runtime_arg1, runtime_arg2,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   223
                           "VerifierTest0")
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   224
                .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   225
            prev_dump_setting = dump_setting;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   226
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   227
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   228
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   229
    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
   230
        String appClasses[];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   231
        String jar;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   232
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   233
        // The following section is for testing the scenarios where
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   234
        // the classes are verifiable during dump time.
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   235
        appClasses = TestCommon.list("Hi",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   236
                                     "Greet",
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   237
                                     "Hi$MyClass");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   238
        jar = TestCommon.getTestJar(jarName_hi + ".jar") + File.pathSeparator +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   239
            TestCommon.getTestJar(jarName_greet + ".jar");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   240
        String config2[][] = {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   241
            // {dump_list, dumptime_verification_setting,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   242
            //  runtime_verification_setting, expected_output_str},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   243
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   244
            // Dump app/ext with -Xverify:remote
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   245
            {"app",   VFY_REMOTE, VFY_REMOTE, PASS_RESULT},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   246
            {"app",   VFY_REMOTE, VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   247
            {"app",   VFY_REMOTE, VFY_NONE,   PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   248
            // Dump app/ext with -Xverify:all
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   249
            {"app",   VFY_ALL,    VFY_REMOTE, PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   250
            {"app",   VFY_ALL,    VFY_ALL,    PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   251
            {"app",   VFY_ALL,    VFY_NONE,   PASS_RESULT },
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   252
            // Dump app/ext with verifier turned off
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   253
            {"app",   VFY_NONE,   VFY_REMOTE, PASS_RESULT},
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   254
            {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   255
            {"app",   VFY_NONE,   VFY_NONE,   PASS_RESULT },
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   256
        };
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   257
        String prev_dump_setting = "";
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   258
        for (int i = 0; i < config2.length; i ++) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   259
            // 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
   260
            String dump_setting = config2[i][1];
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   261
            String runtime_setting = config2[i][2];
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   262
            String expected_output_str = config2[i][3];
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   263
            System.out.println("Test case [" + i + "]: dumping " + config2[i][0] +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   264
                               " with " + dump_setting +
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   265
                               ", run with " + runtime_setting);
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   266
            if (!dump_setting.equals(prev_dump_setting)) {
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   267
                String dump_arg1;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   268
                String dump_arg2;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   269
                if (dump_setting.equals(VFY_NONE)) {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   270
                    dump_arg1 = "-XX:-BytecodeVerificationRemote";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   271
                    dump_arg2 = "-XX:-BytecodeVerificationLocal";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   272
                } else {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   273
                    // Redundant args should be harmless.
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   274
                    dump_arg1 = dump_arg2 = dump_setting;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   275
                }
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   276
                OutputAnalyzer dumpOutput = TestCommon.dump(
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   277
                                                            jar, appClasses, dump_arg1, dump_arg2,
51370
fbb62267e5e9 8208705: [TESTBUG] The -Xlog:cds,cds+hashtables vm option is not always required for appcds tests
ccheung
parents: 49931
diff changeset
   278
                                                            CDS_LOGGING,
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   279
                                                            // 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
   280
                                                            // 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
   281
                                                            "-Xms256m",
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   282
                                                            "-Xmx256m");
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   283
                if (dump_setting.equals(VFY_NONE) &&
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   284
                    runtime_setting.equals(VFY_REMOTE)) {
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   285
                    dumpOutput.shouldContain(VFY_INFO_MESSAGE);
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   286
                }
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   287
            }
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   288
            String runtime_arg1;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   289
            String runtime_arg2;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   290
            if (runtime_setting.equals(VFY_NONE)) {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   291
                runtime_arg1 = "-XX:-BytecodeVerificationRemote";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   292
                runtime_arg2 = "-XX:-BytecodeVerificationLocal";
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   293
            } else {
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   294
                // Redundant args should be harmless.
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   295
                runtime_arg1 = runtime_arg2 = runtime_setting;
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   296
            }
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   297
            TestCommon.run("-cp", jar,
53853
7ca9e625d6b2 8214719: Deprecate -Xverify:none option
hseigel
parents: 52361
diff changeset
   298
                           runtime_arg1, runtime_arg2,
48979
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   299
                           "Hi")
514c73a1955b 8179249: Improve process output analysis in CDS tests
iklam
parents: 48973
diff changeset
   300
                .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str));
49769
b8c9bec06921 8197972: Always verify non-system classes during CDS dump time
ccheung
parents: 48979
diff changeset
   301
           prev_dump_setting = dump_setting;
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   302
        }
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
    static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   306
        jarFile.delete();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   307
        Files.copy(jarSrcFile.toPath(), jarFile.toPath());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   308
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   309
        File dir = new File(System.getProperty("test.classes", "."));
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   310
        File outdir = new File(dir, "verifier_test_classes");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   311
        outdir.mkdir();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   312
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   313
        writeClassFile(new File(outdir, "UnverifiableBase.class"), makeUnverifiableBase());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   314
        writeClassFile(new File(outdir, "UnverifiableIntf.class"), makeUnverifiableIntf());
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   315
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   316
        JarBuilder.update(jarFile.getPath(), outdir.getPath());
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
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   319
    static void writeClassFile(File file, byte bytecodes[]) throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   320
        try (FileOutputStream fos = new FileOutputStream(file)) {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   321
            fos.write(bytecodes);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   322
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   323
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   324
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   325
    // 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
   326
    static byte[] makeUnverifiableBase() throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   327
        ClassWriter cw = new ClassWriter(0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   328
        FieldVisitor fv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   329
        MethodVisitor mv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   330
        AnnotationVisitor av0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   331
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
   332
        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
   333
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   334
            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
   335
            fv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   336
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   337
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   338
            mv = cw.visitMethod(0, "<init>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   339
            mv.visitCode();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   340
            mv.visitVarInsn(ALOAD, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   341
            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   342
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   343
            mv.visitMaxs(1, 1);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   344
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   345
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   346
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   347
            mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   348
            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
   349
            mv.visitTypeInsn(NEW, "VerifierTest0");
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   350
            mv.visitInsn(DUP);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   351
            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   352
            mv.visitFieldInsn(PUTSTATIC, "UnverifiableBase", "x", "LVerifierTest;");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   353
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   354
            mv.visitMaxs(2, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   355
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   356
        }
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
   357
        addBadMethod(cw);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   358
        cw.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   359
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   360
        return cw.toByteArray();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   361
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   362
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   363
    // 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
   364
    static byte[] makeUnverifiableIntf() throws Exception {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   365
        ClassWriter cw = new ClassWriter(0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   366
        FieldVisitor fv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   367
        MethodVisitor mv;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   368
        AnnotationVisitor av0;
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   369
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
   370
        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
   371
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   372
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   373
            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
   374
            fv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   375
        }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   376
        {
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   377
            mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   378
            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
   379
            mv.visitTypeInsn(NEW, "VerifierTest0");
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   380
            mv.visitInsn(DUP);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   381
            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   382
            mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", "LVerifierTest0;");
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   383
            mv.visitInsn(RETURN);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   384
            mv.visitMaxs(2, 0);
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   385
            mv.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   386
        }
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
   387
        addBadMethod(cw);
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   388
        cw.visitEnd();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   389
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   390
        return cw.toByteArray();
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   391
    }
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   392
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
   393
    // 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
   394
    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
   395
        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
   396
        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
   397
        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
   398
        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
   399
        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
   400
    }
48138
78b2ecdd3c4b 8188791: Move AppCDS from closed repo to open repo
iklam
parents:
diff changeset
   401
}