jdk/test/java/security/Provider/SecurityProviderModularTest.java
author ssahoo
Wed, 23 Aug 2017 09:13:32 -0700
changeset 46898 4d2a6afafb76
parent 45393 de4e1efc8eec
permissions -rw-r--r--
8183310: java/security/modules/ModularTest.java should clean up better Summary: This require cleaning up Test files. Reviewed-by: weijun
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     1
/*
45393
de4e1efc8eec 8181335: remove packageless CompilerUtils
iignatyev
parents: 40261
diff changeset
     2
 * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     4
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     8
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    13
 * accompanied this code).
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    14
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    18
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    21
 * questions.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    22
 */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    23
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    24
import java.nio.file.Files;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    25
import java.nio.file.Path;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    26
import java.nio.file.Paths;
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    27
import java.nio.file.StandardCopyOption;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    28
import java.security.Security;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    29
import java.util.Collections;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    30
import java.util.HashMap;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    31
import java.util.LinkedList;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    32
import java.util.List;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    33
import java.util.Map;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    34
import java.util.Arrays;
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    35
import java.util.stream.Stream;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    36
import java.io.File;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    37
import java.io.IOException;
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    38
import java.io.OutputStream;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    39
import java.lang.module.ModuleDescriptor;
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    40
import java.lang.module.ModuleDescriptor.Builder;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    41
import jdk.internal.module.ModuleInfoWriter;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    42
import jdk.test.lib.process.ProcessTools;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    43
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    44
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    45
/*
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    46
 * @test
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    47
 * @bug 8130360 8183310
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    48
 * @summary Test security provider in different combination of modular option
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    49
 *          defined with(out) service description.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    50
 * @library /lib/testlibrary /test/lib
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    51
 * @modules java.base/jdk.internal.module
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    52
 * @build JarUtils TestProvider TestClient
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    53
 * @run main SecurityProviderModularTest CL true
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    54
 * @run main SecurityProviderModularTest CL false
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    55
 * @run main SecurityProviderModularTest SL true
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    56
 * @run main SecurityProviderModularTest SL false
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    57
 * @run main SecurityProviderModularTest SPN true
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    58
 * @run main SecurityProviderModularTest SPN false
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    59
 * @run main SecurityProviderModularTest SPT true
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    60
 * @run main SecurityProviderModularTest SPT false
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    61
 */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    62
public class SecurityProviderModularTest {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    63
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    64
    private static final Path TEST_CLASSES
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    65
            = Paths.get(System.getProperty("test.classes"));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    66
    private static final Path ARTIFACT_DIR = Paths.get("jars");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    67
    private static final Path SEC_FILE = Paths.get("java.extn.security");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    68
    private static final String PS = File.pathSeparator;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    69
    private static final String P_TYPE = "p.TestProvider";
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    70
    private static final String C_TYPE = "c.TestClient";
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    71
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    72
    /**
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    73
     * Here is the naming convention followed.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    74
     * Test runtime arguments,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    75
     * CL       - Provider class loaded through ClassLoader
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    76
     * SL       - Provider class to be discovered by ServiceLoader
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    77
     * SPN      - Provider name defined through "java.extn.security" file which
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    78
     *            referred through system property "java.security.properties".
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    79
     * SPT      - Provider type defined through "java.extn.security" file which
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    80
     *            referred through system property "java.security.properties".
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    81
     *
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    82
     * For each jar file name,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    83
     * p.jar    - Unnamed provider jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    84
     * pd.jar   - Unnamed provider jar with META-INF provider descriptor.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    85
     * mp.jar   - Modular provider jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    86
     * mpd.jar  - Modular provider jar with META-INF provider descriptor.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    87
     * msp.jar  - Modular provider jar provides service through module-info.java
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    88
     * mspd.jar - Modular provider jar with META-INF provider descriptor and
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    89
     *            provides service through module-info.java.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    90
     * c.jar    - Unnamed client jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    91
     * mc.jar   - Modular client jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    92
     * mcs.jar  - Modular client jar uses service through module-info.java.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    93
     * amc.jar  - Modular client used for automatic provider jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    94
     * amcs.jar - Modular client used for automatic provider jar uses service
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    95
     *            through module-info.java.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    96
     */
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    97
    private static final Path P_JAR = artifact("p.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    98
    private static final Path PD_JAR = artifact("pd.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
    99
    private static final Path MP_JAR = artifact("mp.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   100
    private static final Path MPD_JAR = artifact("mpd.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   101
    private static final Path MSP_JAR = artifact("msp.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   102
    private static final Path MSPD_JAR = artifact("mspd.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   103
    private static final Path C_JAR = artifact("c.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   104
    private static final Path MC_JAR = artifact("mc.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   105
    private static final Path MCS_JAR = artifact("mcs.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   106
    private static final Path AMC_JAR = artifact("amc.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   107
    private static final Path AMCS_JAR = artifact("amcs.jar");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   108
    private static final Map<String, String> MSG_MAP = new HashMap<>();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   109
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   110
    static {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   111
        /*
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   112
         * This mapping help process finding expected message based
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   113
         * on the key passed as argument while executing java command.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   114
         */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   115
        MSG_MAP.put("NoAccess", "cannot access class p.TestProvider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   116
        MSG_MAP.put("Success", "Client: found provider TestProvider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   117
        MSG_MAP.put("NoProvider", "Provider TestProvider not found");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   118
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   119
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   120
    private final String addUNArg;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   121
    private final String addNMArg;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   122
    private final String cArg;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   123
    private final String unnP;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   124
    private final String modP;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   125
    private final String unnC;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   126
    private final String modC;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   127
    private final String autoMC;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   128
    private final String expModRes;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   129
    private final String expAModRes;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   130
    // Common set of VM arguments used in all test cases
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   131
    private final List<String> commonArgs;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   132
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   133
    public SecurityProviderModularTest(String use, boolean metaDesc) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   134
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   135
        List<String> argList = new LinkedList<>();
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   136
        argList.add("-Duser.language=en");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   137
        argList.add("-Duser.region=US");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   138
        final boolean useSL = "SL".equals(use) || "SPN".equals(use);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   139
        final boolean useCL = "CL".equals(use);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   140
        final boolean useSPT = "SPT".equals(use);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   141
        final boolean useSP = use.startsWith("SP");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   142
        /* Use Security property file when the provider expected to
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   143
         * loaded through Security property file. */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   144
        if (useSP) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   145
            /* Create a java.security file to specify the new provider.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   146
             * java.security file extension can be provided using
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   147
             * "-Djava.security.properties" VM argument at runtime.*/
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   148
            createJavaSecurityFileExtn("SPN".equals(use));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   149
            argList.add("-Djava.security.properties=" + toAbsPath(SEC_FILE));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   150
        }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   151
        commonArgs = Collections.unmodifiableList(argList);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   152
        cArg = (useCL) ? P_TYPE : "TestProvider";
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   153
        addUNArg = (useSL) ? "" : ("--add-modules="
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   154
                + ((metaDesc) ? "pd" : "p"));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   155
        addNMArg = (useSL) ? "" : "--add-modules=mp";
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   156
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   157
        // Based on Testcase, select unnamed/modular jar files to use.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   158
        unnP = toAbsPath((metaDesc) ? PD_JAR : P_JAR);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   159
        modP = toAbsPath(useSL ? (metaDesc ? MSPD_JAR : MSP_JAR)
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   160
                : (metaDesc ? MPD_JAR : MP_JAR));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   161
        unnC = toAbsPath(C_JAR);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   162
        modC = toAbsPath(useSL ? MCS_JAR : MC_JAR);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   163
        autoMC = toAbsPath(useSL ? AMCS_JAR : AMC_JAR);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   164
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   165
        expModRes = "Success";
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   166
        expAModRes = (useSPT | useCL) ? "Success"
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   167
                : (metaDesc) ? "Success" : "NoProvider";
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   168
        String loadByMsg = useSP ? "SecurityPropertyFile"
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   169
                : ((useCL) ? "ClassLoader" : "ServiceLoader");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   170
        System.out.printf("%n*** Providers loaded through %s and includes"
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   171
                + " META Descriptor: %s ***%n%n", loadByMsg, metaDesc);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   172
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   173
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   174
    /*
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   175
     * Test cases are based on the following logic,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   176
     * for (ProviderLoadedThrough : {"ServiceLoader", "ClassLoader",
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   177
     *             "SecurityPropertyFile"}) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   178
     *     for (definedWith : {"METAINFService", "WithoutMETAINFService"}) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   179
     *         for (clientType : {"NAMED", "AUTOMATIC", "UNNAMED"}) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   180
     *             for (providerType : {"NAMED", "AUTOMATIC", "UNNAMED"}) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   181
     *                 Create and run java command for each possible case
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   182
     *             }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   183
     *         }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   184
     *     }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   185
     * }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   186
     */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   187
    public static void main(String[] args) throws Exception {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   188
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   189
        // Generates unnamed and modular jars.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   190
        setUp();
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   191
        boolean metaDesc = Boolean.valueOf(args[1]);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   192
        SecurityProviderModularTest test
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   193
                = new SecurityProviderModularTest(args[0], metaDesc);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   194
        test.process(args[0]);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   195
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   196
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   197
    private void process(String use) throws Exception {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   198
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   199
        // Case: NAMED-NAMED, NAMED-AUTOMATIC, NAMED-UNNAMED
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   200
        System.out.printf("Case: Modular Client and Modular Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   201
        execute(String.format("--module-path %s%s%s -m mc/%s %s %s",
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   202
                modC, PS, modP, C_TYPE, use, cArg), expModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   203
        System.out.printf("Case: Modular Client and automatic Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   204
        execute(String.format("--module-path %s%s%s %s -m mc/%s %s %s", autoMC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   205
                PS, unnP, addUNArg, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   206
        System.out.printf("Case: Modular Client and unnamed Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   207
        execute(String.format("--module-path %s -cp %s -m mc/%s %s %s", autoMC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   208
                unnP, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   209
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   210
        // Case: AUTOMATIC-NAMED, AUTOMATIC-AUTOMATIC, AUTOMATIC-UNNAMED
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   211
        System.out.printf("Case: Automatic Client and modular Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   212
        execute(String.format("--module-path %s%s%s %s -m c/%s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   213
                PS, modP, addNMArg, C_TYPE, use, cArg), expModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   214
        System.out.printf("Case: Automatic Client and automatic Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   215
        execute(String.format("--module-path %s%s%s %s -m c/%s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   216
                PS, unnP, addUNArg, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   217
        System.out.printf("Case: Automatic Client and unnamed Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   218
        execute(String.format("--module-path %s -cp %s -m c/%s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   219
                unnP, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   220
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   221
        // Case: UNNAMED-NAMED, UNNAMED-AUTOMATIC, UNNAMED-UNNAMED
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   222
        System.out.printf("Case: Unnamed Client and modular Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   223
        execute(String.format("-cp %s --module-path %s %s %s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   224
                modP, addNMArg, C_TYPE, use, cArg), expModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   225
        System.out.printf("Case: Unnamed Client and automatic Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   226
        execute(String.format("-cp %s --module-path %s %s %s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   227
                unnP, addUNArg, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   228
        System.out.printf("Case: Unnamed Client and unnamed Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   229
        execute(String.format("-cp %s%s%s %s %s %s", unnC, PS, unnP, C_TYPE,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   230
                use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   231
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   232
        // Case: unnamed jars in --module-path and modular jars in -cp.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   233
        System.out.printf(
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   234
                "Case: Unnamed Client and Unnamed Provider in modulepath");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   235
        execute(String.format("--module-path %s%s%s %s -m c/%s %s %s", unnC,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   236
                PS, unnP, addUNArg, C_TYPE, use, cArg), expAModRes);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   237
        System.out.printf(
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   238
                "Case: Modular Client and Modular Provider in classpath");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   239
        execute(String.format("-cp %s%s%s %s %s %s", modC, PS, modP, C_TYPE,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   240
                use, cArg), expAModRes);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   241
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   242
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   243
    /**
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   244
     * Execute with command arguments and process the result.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   245
     */
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   246
    private void execute(String args, String msgKey) throws Exception {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   247
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   248
        String[] safeArgs = Stream.concat(commonArgs.stream(),
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   249
                Stream.of(args.split("\\s+"))).filter(s -> {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   250
            if (s.contains(" ")) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   251
                throw new RuntimeException("No spaces in args");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   252
            }
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   253
            return !s.isEmpty();
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   254
        }).toArray(String[]::new);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   255
        String out = ProcessTools.executeTestJvm(safeArgs).getOutput();
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   256
        // Handle response.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   257
        if ((msgKey != null && out.contains(MSG_MAP.get(msgKey)))) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   258
            System.out.printf("PASS: Expected Result: %s.%n",
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   259
                    MSG_MAP.get(msgKey));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   260
        } else if (out.contains("Exception") || out.contains("Error")) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   261
            System.out.printf("OUTPUT: %s", out);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   262
            throw new RuntimeException("FAIL: Unknown Exception occured. "
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   263
                    + "Expected: " + MSG_MAP.get(msgKey));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   264
        } else {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   265
            System.out.printf("OUTPUT: %s", out);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   266
            throw new RuntimeException("FAIL: Unknown Test case found");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   267
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   268
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   269
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   270
    /**
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   271
     * Creates Unnamed/modular jar files for TestClient and TestClassLoader.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   272
     */
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   273
    private static void setUp() throws Exception {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   274
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   275
        if (ARTIFACT_DIR.toFile().exists()) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   276
            System.out.println("Skipping setup: Artifacts already exists.");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   277
            return;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   278
        }
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   279
        // Generate unnamed provider jar file.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   280
        JarUtils.createJarFile(P_JAR, TEST_CLASSES, "p/TestProvider.class");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   281
        // Generate unnamed client jar file.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   282
        JarUtils.createJarFile(C_JAR, TEST_CLASSES, "c/TestClient.class");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   283
        // Generate unnamed provider jar files with META-INF descriptor.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   284
        generateJar(P_JAR, PD_JAR, null, true);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   285
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   286
        Builder mBuilder = ModuleDescriptor.newModule("mp").exports("p");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   287
        // Modular provider defined as META-INF service.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   288
        generateJar(P_JAR, MPD_JAR, mBuilder.build(), true);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   289
        // Modular jar exports package to let the provider type accessible.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   290
        generateJar(P_JAR, MP_JAR, mBuilder.build(), false);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   291
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   292
        mBuilder = ModuleDescriptor.newModule("mp")
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   293
                .provides("java.security.Provider", Arrays.asList(P_TYPE));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   294
        // Modular provider Service in module-info does not need to export
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   295
        // its package.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   296
        generateJar(P_JAR, MSP_JAR, mBuilder.build(), false);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   297
        // Modular provider Service in module-info also have META-INF descriptor
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   298
        generateJar(P_JAR, MSPD_JAR, mBuilder.build(), true);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   299
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   300
        mBuilder = ModuleDescriptor.newModule("mc").exports("c");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   301
        // Generate modular client jar file to use automatic provider jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   302
        generateJar(C_JAR, AMC_JAR, mBuilder.build(), false);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   303
        // Generate modular client jar file to use modular provider jar.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   304
        generateJar(C_JAR, MC_JAR, mBuilder.requires("mp").build(), false);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   305
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   306
        mBuilder = ModuleDescriptor.newModule("mc").exports("c")
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   307
                .uses("java.security.Provider");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   308
        // Generate modular client jar file to use automatic provider service.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   309
        generateJar(C_JAR, AMCS_JAR, mBuilder.build(), false);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   310
        // Generate modular client jar file using modular provider service.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   311
        generateJar(C_JAR, MCS_JAR, mBuilder.requires("mp").build(), false);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   312
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   313
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   314
    /**
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   315
     * Update Unnamed jars and include descriptor files.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   316
     */
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   317
    private static void generateJar(Path sjar, Path djar,
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   318
            ModuleDescriptor mDesc, boolean metaDesc) throws Exception {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   319
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   320
        Files.copy(sjar, djar, StandardCopyOption.REPLACE_EXISTING);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   321
        Path dir = Files.createTempDirectory("tmp");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   322
        if (metaDesc) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   323
            write(dir.resolve(Paths.get("META-INF", "services",
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   324
                    "java.security.Provider")), P_TYPE);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   325
        }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   326
        if (mDesc != null) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   327
            Path mi = dir.resolve("module-info.class");
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   328
            try (OutputStream out = Files.newOutputStream(mi)) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   329
                ModuleInfoWriter.write(mDesc, out);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   330
            }
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   331
            System.out.format("Added 'module-info.class' in '%s'%n", djar);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   332
        }
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   333
        JarUtils.updateJarFile(djar, dir);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   334
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   335
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   336
    /**
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   337
     * Look for file path in generated jars.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   338
     */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   339
    private static Path artifact(String file) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   340
        return ARTIFACT_DIR.resolve(file);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   341
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   342
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   343
    /**
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   344
     * Convert to absolute file path.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   345
     */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   346
    private static String toAbsPath(Path path) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   347
        return path.toFile().getAbsolutePath();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   348
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   349
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   350
    /**
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   351
     * Create the parent directories if missing to ensure the path exist.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   352
     */
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   353
    private static Path ensurePath(Path at) throws IOException {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   354
        Path parent = at.getParent();
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   355
        if (parent != null && !parent.toFile().exists()) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   356
            ensurePath(parent);
39774
25d5618feb3c 8151654: Additional modular test for "auth.login.defaultCallbackHandler"
ssahoo
parents: 36511
diff changeset
   357
        }
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   358
        return Files.createDirectories(parent);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   359
    }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   360
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   361
    /**
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   362
     * Generates service descriptor inside META-INF folder.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   363
     */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   364
    private static void write(Path at, String content) throws IOException {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   365
        ensurePath(at);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   366
        Files.write(at, content.getBytes("UTF-8"));
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   367
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   368
46898
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   369
    /**
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   370
     * Create new provider entry through java.security file extension.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   371
     * New provider entry will be the last entry inside the JRE.
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   372
     */
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   373
    private static void createJavaSecurityFileExtn(boolean useName) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   374
        int insertAt = Security.getProviders().length + 1;
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   375
        String provider = (useName ? "TestProvider" : P_TYPE);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   376
        try {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   377
            Files.write(SEC_FILE, String.format("security.provider.%s=%s",
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   378
                    insertAt, provider).getBytes("UTF-8"));
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   379
        } catch (IOException e) {
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   380
            throw new RuntimeException(e);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   381
        }
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   382
        System.out.printf("Security property file created at: %s with value:"
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   383
                + " %s%n", SEC_FILE, provider);
4d2a6afafb76 8183310: java/security/modules/ModularTest.java should clean up better
ssahoo
parents: 45393
diff changeset
   384
    }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   385
}