File: AltProvider.java

package info (click to toggle)
openjdk-21 21.0.8%2B9-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 823,976 kB
  • sloc: java: 5,613,338; xml: 1,643,607; cpp: 1,296,296; ansic: 420,291; asm: 404,850; objc: 20,994; sh: 15,271; javascript: 11,245; python: 6,895; makefile: 2,362; perl: 357; awk: 351; sed: 172; jsp: 24; csh: 3
file content (171 lines) | stat: -rw-r--r-- 6,525 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * @test
 * @bug 4906940 8130302 8194152 8281175
 * @summary -providerPath, -providerClass, -addprovider, and -providerArg
 * @library /test/lib
 * @modules java.base/jdk.internal.misc
 * @build jdk.test.lib.util.JarUtils
 *        jdk.test.lib.compiler.CompilerUtils
 *        jdk.test.lib.Utils
 *        jdk.test.lib.Asserts
 *        jdk.test.lib.JDKToolFinder
 *        jdk.test.lib.JDKToolLauncher
 *        jdk.test.lib.Platform
 *        jdk.test.lib.process.*
 * @run main AltProvider
 */

import jdk.test.lib.JDKToolLauncher;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.util.JarUtils;
import jdk.test.lib.compiler.CompilerUtils;

import java.nio.file.*;

public class AltProvider {

    private static final String TEST_SRC =
            Paths.get(System.getProperty("test.src")).toString();

    private static final Path MOD_SRC_DIR = Paths.get(TEST_SRC, "alt");
    private static final Path MOD_DEST_DIR = Paths.get("mods");

    private static final String ktCommand = "-keystore x.jks " +
            "-storepass changeit -storetype dummyks -list -debug";

    private static final String jsCommand = "-keystore x.jks " +
            "-storepass changeit -storetype dummyks -debug x.jar x";

    public static void main(String[] args) throws Throwable {

        // Compile the provider
        CompilerUtils.compile(
                MOD_SRC_DIR, MOD_DEST_DIR,
                "--module-source-path",
                MOD_SRC_DIR.toString());

        // Create a keystore
        tool("keytool", "-keystore x.jks -storetype jks -genkeypair -keyalg dsa" +
                " -storepass changeit -keypass changeit -alias x -dname CN=X")
                .shouldHaveExitValue(0);

        // Create a jar file
        JarUtils.createJar("x.jar", "x.jks");

        // Test starts here

        // Without new provider
        testBoth("", 1, "DUMMYKS not found");

        // legacy, on classpath
        testBoth("-providerpath mods/test.dummy " +
                "-providerClass org.test.dummy.DummyProvider -providerArg full",
                0, "loadProviderByClass: org.test.dummy.DummyProvider");

        // Wrong name
        testBoth("-providerpath mods/test.dummy " +
                "-providerClass org.test.dummy.Dummy -providerArg full",
                1, "Provider \"org.test.dummy.Dummy\" not found");

        // Not a provider name
        testBoth("-providerpath mods/test.dummy " +
                "-providerClass java.lang.Object -providerArg full",
                1, "java.lang.Object not a provider");

        // without arg
        testBoth("-providerpath mods/test.dummy " +
                "-providerClass org.test.dummy.DummyProvider",
                1, "DUMMYKS not found");

        // old -provider still works
        testBoth("-providerpath mods/test.dummy " +
                "-provider org.test.dummy.DummyProvider -providerArg full",
                0, "loadProviderByClass: org.test.dummy.DummyProvider");

        // name in a module
        testBoth("-J--module-path=mods " +
                "-addprovider Dummy -providerArg full",
                0, "loadProviderByName: Dummy");

        // -providerClass does not work
        testBoth("-J--module-path=mods " +
                "-providerClass org.test.dummy.DummyProvider -providerArg full",
                1, "Provider \"org.test.dummy.DummyProvider\" not found");

        // -addprovider with class does not work
        testBoth("-J--module-path=mods " +
                "-addprovider org.test.dummy.DummyProvider -providerArg full",
                1, "Provider named \"org.test.dummy.DummyProvider\" not found");

        // -addprovider without arg does not work
        testBoth("-J--module-path=mods " +
                "-addprovider Dummy",
                1, "DUMMYKS not found");
    }

    // Test both tools with the same extra options
    private static void testBoth(String args, int exitValue, String contains)
            throws Throwable {
        testKeytool(args, exitValue, contains);
        testJarsigner(args, exitValue, contains);
    }

    // Test keytool with extra options and check exitValue and output
    private static void testKeytool(String args, int exitValue, String contains)
            throws Throwable {
        tool("keytool", ktCommand + " " + args)
                .shouldHaveExitValue(exitValue)
                .shouldContain(contains);
    }

    // Test jarsigner with extra options and check exitValue and output
    private static void testJarsigner(String args, int exitValue, String contains)
            throws Throwable {
        tool("jarsigner", jsCommand + " " + args)
                .shouldHaveExitValue(exitValue)
                .shouldContain(contains);
    }

    // Launch a tool with args (space separated string)
    private static OutputAnalyzer tool(String tool, String args)
            throws Throwable {
        JDKToolLauncher l = JDKToolLauncher.createUsingTestJDK(tool);

        // Set locale to en-US so that the output are not translated into other languages.
        l.addVMArg("-Duser.language=en");
        l.addVMArg("-Duser.country=US");

        for (String a: args.split("\\s+")) {
            if (a.startsWith("-J")) {
                l.addVMArg(a.substring(2));
            } else {
                l.addToolArg(a);
            }
        }
        return ProcessTools.executeCommand(l.getCommand());
    }
}