/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package org.glassfish.admin.amxtest.config;
import com.sun.appserv.management.base.Container;
import com.sun.appserv.management.base.Util;
import com.sun.appserv.management.base.XTypes;
import com.sun.appserv.management.config.AMXConfig;
import com.sun.appserv.management.config.AuthRealmConfig;
import static com.sun.appserv.management.config.AuthRealmConfig.*;
import com.sun.appserv.management.config.SecurityServiceConfig;
import com.sun.appserv.management.util.misc.CollectionUtil;
import com.sun.appserv.management.util.misc.GSetUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
*/
public final class AuthRealmConfigTest
extends ConfigMgrTestBase {
public AuthRealmConfigTest() {
if (checkNotOffline("ensureDefaultInstance")) {
ensureDefaultInstance(getConfigConfig().getSecurityServiceConfig());
}
}
private static boolean WARNED_TESTABLE = false;
private static final String TEMPLATE_PREFIX = "${";
private synchronized Map<String, AuthRealmConfig>
getTestableAuthRealms() {
final Map<String, AuthRealmConfig> m =
getConfigConfig().getSecurityServiceConfig().getAuthRealmConfigMap();
final Map<String, AuthRealmConfig> std = new HashMap<String, AuthRealmConfig>();
final List<String> warnings = new ArrayList<String>();
for (final String name : m.keySet()) {
final AuthRealmConfig c = m.get(name);
if (AuthRealmConfig.DEFAULT_REALM_CLASSNAME.equals(c.getClassname())) {
try {
final String file = c.getPropertyConfigMap().get("file").getValue();
if (file == null) {
warnings.add("Realm " + name +
" does not have a 'file' property (test skipped)");
} else if (file.indexOf(TEMPLATE_PREFIX) >= 0) {
warnings.add("Realm " + name +
" uses a ${...} name, not yet supported (test skipped)");
} else {
std.put(c.getName(), c);
}
}
catch (Exception e) {
}
}
}
if (!WARNED_TESTABLE) {
WARNED_TESTABLE = true;
warning(NEWLINE + CollectionUtil.toString(warnings, NEWLINE) + NEWLINE +
"Realms which WILL be tested: {" + CollectionUtil.toString(m.keySet()) + "}");
}
return std;
}
public synchronized void
testGetters() {
final Map<String, AuthRealmConfig> arcMap = getTestableAuthRealms();
for (final AuthRealmConfig ar : arcMap.values()) {
ar.getName();
final String classname = ar.getClassname();
if (classname != null) {
ar.setClassname(classname);
}
}
}
private boolean
userExists(
final AuthRealmConfig config,
final String user) {
warning( "testAddRemoveUpdateUser.userExists(): NO API exists to getUserNames()" );
//return GSetUtil.newStringSet((String[]) config.getUserNames()).contains(user);
return false;
}
public synchronized void
testAddRemoveUpdateUser()
throws Exception {
warning( "testAddRemoveUpdateUser.AuthRealmConfigTest(): NO API exists to add/remove users" );
/*
final Map<String, AuthRealmConfig> arcMap = getTestableAuthRealms();
final String USER = "test";
final Set<AuthRealmConfig> failures = new HashSet<AuthRealmConfig>();
for (final AuthRealmConfig ar : arcMap.values()) {
//printVerbose( "TESTING: " + ar.getName() );
try {
ar.getUserNames();
if (userExists(ar, USER)) {
ar.removeUser(USER);
}
ar.addUser(USER, "foo-pwd", null);
assert (userExists(ar, USER));
ar.updateUser(USER, "foo-pwd2", null);
assert (userExists(ar, USER));
ar.removeUser(USER);
assert (!userExists(ar, USER));
//printVerbose( "SUCCESS testing: " + ar.getName() );
}
catch (Exception e) {
trace("");
trace("");
trace("FAILURE FOR: " + ar.getName());
//e.printStackTrace();
failures.add(ar);
}
}
if (failures.size() != 0) {
final Set<String> names = Util.getNames(failures);
warning("testAddRemoveUpdateUser failed on the following realms: " +
CollectionUtil.toString(names));
assert (false);
}
*/
}
public synchronized void
testGetGroupNames() {
warning( "testAddRemoveUpdateUser.testGetGroupNames(): NO API exists for getGroupNames()" );
/*
final Map<String, AuthRealmConfig> arcMap = getTestableAuthRealms();
for (final AuthRealmConfig ar : arcMap.values()) {
ar.getGroupNames();
}
*/
}
public synchronized void
testGetUserGroupNames() {
warning( "testAddRemoveUpdateUser.testGetUserGroupNames(): NO API exists for getUserNames(), getUserGroupNames()" );
/*
final Map<String, AuthRealmConfig> arcMap = getTestableAuthRealms();
for (final AuthRealmConfig ar : arcMap.values()) {
final String[] users = ar.getUserNames();
for (final String user : users) {
ar.getUserGroupNames(user);
}
}
*/
}
public static String
getDefaultInstanceName() {
return getDefaultInstanceName("AuthRealmConfig");
}
public static AuthRealmConfig
ensureDefaultInstance(final SecurityServiceConfig securityServiceConfig) {
AuthRealmConfig result =
securityServiceConfig.getAuthRealmConfigMap().get(getDefaultInstanceName());
if (result == null) {
result = createInstance(securityServiceConfig,
getDefaultInstanceName(),
DEFAULT_REALM_CLASSNAME,
KEY_FILE_PREFIX + "default-instance-test");
}
return result;
}
public static AuthRealmConfig
createInstance(
final SecurityServiceConfig securityServiceConfig,
final String name,
final String classname,
final String keyFile) {
final Map<String, String> options = new HashMap<String, String>();
options.put(KEY_FILE_PROPERTY_KEY, keyFile);
options.put(JAAS_CONTEXT_PROPERTY_KEY, "dummy-jaas-context-value");
return securityServiceConfig.createAuthRealmConfig(name, classname, options);
}
protected Container
getProgenyContainer() {
return getConfigConfig().getSecurityServiceConfig();
}
protected String
getProgenyJ2EEType() {
return XTypes.AUTH_REALM_CONFIG;
}
protected void
removeProgeny(final String name) {
getConfigConfig().getSecurityServiceConfig().removeAuthRealmConfig(name);
}
protected final AMXConfig
createProgeny(
final String name,
final Map<String, String> options) {
if (name.indexOf("Illegal") >= 0) {
// MBean doesn't detect illegal parameters; anything is allowed
// for the realm.
throw new IllegalArgumentException();
}
return createInstance(getConfigConfig().getSecurityServiceConfig(),
name, DEFAULT_REALM_CLASSNAME, name + "-keyfile");
}
}