blob: 2f4d7e1e036d0ef37bf2adee4dfbb5ed695b01bb [file] [log] [blame]
/*
* Copyright (c) 2005, 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 6268315
* @bug 6273812
* @summary Configuration should be provider-based
* @build GetInstanceConfigSpi GetInstanceProvider
* @run main/othervm -Djava.security.auth.login.config==${test.src}${/}GetInstance.config GetInstance
*/
import javax.security.auth.login.*;
import java.security.*;
import java.io.File;
import java.net.URI;
public class GetInstance {
private static final String JAVA_CONFIG = "JavaLoginConfig";
private static final String MOD0 = "com.foo.Module";
private static final String MOD1 = "com.bar.Module";
private static final String MOD2 = "com.foobar.Module";
private static final String MOD3 = "Module";
private static class BadParam implements Configuration.Parameters { }
public static void main(String[] args) throws Exception {
int testnum = 1;
GetInstance gi = new GetInstance();
testnum = gi.testDefault(testnum);
testnum = gi.testStringProvider(testnum);
testnum = gi.testProvider(testnum);
testnum = gi.testCustomImpl(testnum);
testnum = gi.testURIParam(testnum);
testnum = gi.testException(testnum);
}
private int testDefault(int testnum) throws Exception {
// get an instance of the default ConfigSpiFile
Configuration c = Configuration.getInstance(JAVA_CONFIG, null);
doTest(c, testnum++);
// get an instance of FooConfig
try {
c = Configuration.getInstance("FooConfig", null);
throw new SecurityException("test " + testnum++ + " failed");
} catch (NoSuchAlgorithmException nsae) {
// good
System.out.println("test " + testnum++ + " passed");
}
return testnum;
}
private int testStringProvider(int testnum) throws Exception {
// get an instance of JavaLoginConfig from SUN
Configuration c = Configuration.getInstance(JAVA_CONFIG, null, "SUN");
doTest(c, testnum++);
// get an instance of JavaLoginConfig from SunRsaSign
try {
c = Configuration.getInstance(JAVA_CONFIG, null, "SunRsaSign");
throw new SecurityException("test " + testnum++ + " failed");
} catch (NoSuchAlgorithmException nsae) {
// good
System.out.println("test " + testnum++ + " passed");
}
// get an instance of JavaLoginConfig from FOO
try {
c = Configuration.getInstance(JAVA_CONFIG, null, "FOO");
throw new SecurityException("test " + testnum++ + " failed");
} catch (NoSuchProviderException nspe) {
// good
System.out.println("test " + testnum++ + " passed");
}
return testnum;
}
private int testProvider(int testnum) throws Exception {
// get an instance of JavaLoginConfig from SUN
Configuration c = Configuration.getInstance(JAVA_CONFIG,
null,
Security.getProvider("SUN"));
doTest(c, testnum++);
// get an instance of JavaLoginConfig from SunRsaSign
try {
c = Configuration.getInstance(JAVA_CONFIG,
null,
Security.getProvider("SunRsaSign"));
throw new SecurityException("test " + testnum++ + " failed");
} catch (NoSuchAlgorithmException nsae) {
// good
System.out.println("test " + testnum++ + " passed");
}
return testnum;
}
private int testCustomImpl(int testnum) throws Exception {
Provider customProvider = new GetInstanceProvider();
Configuration c = Configuration.getInstance("GetInstanceConfigSpi",
null,
customProvider);
doCustomTest(c, testnum++, customProvider);
return testnum;
}
private int testURIParam(int testnum) throws Exception {
// get an instance of JavaLoginConfig
// from SUN and have it read from the URI
File file = new File(System.getProperty("test.src", "."),
"GetInstance.configURI");
URI uri = file.toURI();
URIParameter uriParam = new URIParameter(uri);
Configuration c = Configuration.getInstance(JAVA_CONFIG, uriParam);
doTestURI(c, uriParam, testnum++);
return testnum;
}
private int testException(int testnum) throws Exception {
// get an instance of JavaLoginConfig
// from SUN and have it read from the bad URI
File file = new File(System.getProperty("test.src", "."),
"GetInstance.bad.configURI");
URI uri = file.toURI();
URIParameter uriParam = new URIParameter(uri);
try {
Configuration c = Configuration.getInstance(JAVA_CONFIG, uriParam);
throw new SecurityException("expected IOException");
} catch (NoSuchAlgorithmException nsae) {
if (nsae.getCause() instanceof java.io.IOException) {
System.out.println("exception test passed: " +
nsae.getCause().getMessage());
} else {
throw new SecurityException("expected IOException");
}
}
// pass bad param
try {
Configuration c = Configuration.getInstance(JAVA_CONFIG,
new BadParam());
throw new SecurityException("test " + testnum++ + " failed");
} catch (IllegalArgumentException iae) {
// good
System.out.println("test " + testnum++ + " passed");
}
try {
Configuration c = Configuration.getInstance(JAVA_CONFIG,
new BadParam(),
"SUN");
throw new SecurityException("test " + testnum++ + " failed");
} catch (IllegalArgumentException iae) {
// good
System.out.println("test " + testnum++ + " passed");
}
try {
Configuration c = Configuration.getInstance(JAVA_CONFIG,
new BadParam(),
Security.getProvider("SUN"));
throw new SecurityException("test " + testnum++ + " failed");
} catch (IllegalArgumentException iae) {
// good
System.out.println("test " + testnum++ + " passed");
}
return testnum;
}
private int doCommon(Configuration c, int testnum) throws Exception {
AppConfigurationEntry[] entries = c.getAppConfigurationEntry("EMPTY");
if (entries == null) {
System.out.println("test " + testnum + ".1 passed");
} else {
throw new SecurityException("test " + testnum + ".1 failed");
}
entries = c.getAppConfigurationEntry("one");
if (entries.length == 1 &&
MOD0.equals(entries[0].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED ==
entries[0].getControlFlag()) {
System.out.println("test " + testnum + ".2 passed");
} else {
throw new SecurityException("test " + testnum + ".2 failed");
}
entries = c.getAppConfigurationEntry("two");
if (entries.length == 2 &&
MOD0.equals(entries[0].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT ==
entries[0].getControlFlag() &&
MOD1.equals(entries[1].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED ==
entries[1].getControlFlag()) {
System.out.println("test " + testnum + ".3 passed");
} else {
throw new SecurityException("test " + testnum + ".3 failed");
}
entries = c.getAppConfigurationEntry("three");
if (entries.length == 3 &&
MOD0.equals(entries[0].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT ==
entries[0].getControlFlag() &&
MOD1.equals(entries[1].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED ==
entries[1].getControlFlag() &&
MOD2.equals(entries[2].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL ==
entries[2].getControlFlag()) {
System.out.println("test " + testnum + ".4 passed");
} else {
throw new SecurityException("test " + testnum + ".4 failed");
}
return testnum;
}
private void doCustomTest(Configuration c,
int testnum,
Provider custom) throws Exception {
testnum = doCommon(c, testnum);
// test getProvider
if (custom == c.getProvider() &&
"GetInstanceProvider".equals(c.getProvider().getName())) {
System.out.println("test " + testnum + " (getProvider) passed");
} else {
throw new SecurityException
("test " + testnum + " (getProvider) failed");
}
// test getType
if ("GetInstanceConfigSpi".equals(c.getType())) {
System.out.println("test " + testnum + "(getType) passed");
} else {
throw new SecurityException("test " + testnum +
" (getType) failed");
}
}
private void doTest(Configuration c, int testnum) throws Exception {
testnum = doCommon(c, testnum);
// test getProvider
if ("SUN".equals(c.getProvider().getName())) {
System.out.println("test " + testnum + " (getProvider) passed");
} else {
throw new SecurityException("test " + testnum +
" (getProvider) failed");
}
// test getType
if (JAVA_CONFIG.equals(c.getType())) {
System.out.println("test " + testnum + " (getType) passed");
} else {
throw new SecurityException("test " + testnum +
" (getType) failed");
}
}
private void doTestURI(Configuration c,
Configuration.Parameters uriParam,
int testnum) throws Exception {
AppConfigurationEntry[] entries = c.getAppConfigurationEntry("four");
if (entries.length == 4 &&
MOD0.equals(entries[0].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT ==
entries[0].getControlFlag() &&
MOD1.equals(entries[1].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED ==
entries[1].getControlFlag() &&
MOD2.equals(entries[2].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL ==
entries[2].getControlFlag() &&
MOD3.equals(entries[3].getLoginModuleName()) &&
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED ==
entries[3].getControlFlag()) {
System.out.println("test " + testnum + ".1 passed");
} else {
throw new SecurityException("test " + testnum + ".1 failed");
}
// test getProvider
if ("SUN".equals(c.getProvider().getName())) {
System.out.println("test " + testnum + " (getProvider) passed");
} else {
throw new SecurityException("test " + testnum +
" (getProvider) failed");
}
// test getType
if (JAVA_CONFIG.equals(c.getType())) {
System.out.println("test " + testnum + " (getType) passed");
} else {
throw new SecurityException("test " + testnum +
" (getType) failed");
}
// test getParameters
if (uriParam.equals(c.getParameters())) {
System.out.println("test " + testnum + " (getParameters) passed");
} else {
throw new SecurityException("test " + testnum +
" (getParameters) failed");
}
}
}