blob: 58471ffd936886f8e00ce78f42c7701aaf275668 [file] [log] [blame]
/*
* Copyright (c) 2016, 2018, 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
* @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" +
" -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 use (-providerPath only supported by keytool)
testKeytool("-providerPath mods/test.dummy " +
"-providerClass org.test.dummy.DummyProvider -providerArg full",
0, "loadProviderByClass: org.test.dummy.DummyProvider");
// legacy, on classpath
testBoth("-J-cp -Jmods/test.dummy " +
"-providerClass org.test.dummy.DummyProvider -providerArg full",
0, "loadProviderByClass: org.test.dummy.DummyProvider");
// Wrong name
testBoth("-J-cp -Jmods/test.dummy " +
"-providerClass org.test.dummy.Dummy -providerArg full",
1, "Provider \"org.test.dummy.Dummy\" not found");
// Not a provider name
testBoth("-J-cp -Jmods/test.dummy " +
"-providerClass java.lang.Object -providerArg full",
1, "java.lang.Object not a provider");
// without arg
testBoth("-J-cp -Jmods/test.dummy " +
"-providerClass org.test.dummy.DummyProvider",
1, "DUMMYKS not found");
// old -provider still works
testBoth("-J-cp -Jmods/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());
}
}