blob: a798400155bfa2a60d488c013c40c64c1140e167 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.geronimo.components.jaspi;
import java.net.URL;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.message.config.AuthConfigFactory;
import javax.security.auth.message.config.AuthConfigFactory.RegistrationContext;
import javax.security.auth.message.config.AuthConfigProvider;
import javax.security.auth.message.config.RegistrationListener;
import javax.security.auth.message.module.ClientAuthModule;
import javax.security.auth.message.module.ServerAuthModule;
import junit.framework.TestCase;
import org.apache.geronimo.components.jaspi.model.AuthModuleType;
import org.apache.geronimo.components.jaspi.model.JaspiUtil;
import org.apache.geronimo.components.jaspi.providers.BadConstructorProvider;
import org.apache.geronimo.components.jaspi.providers.BadImplementProvider;
import org.apache.geronimo.components.jaspi.providers.DummyClientAuthModule;
import org.apache.geronimo.components.jaspi.providers.DummyProvider;
import org.apache.geronimo.components.jaspi.providers.DummyServerAuthModule;
public class AuthConfigFactoryImplTest extends TestCase {
protected void setUp() throws Exception {
URL url = getClass().getClassLoader().getResource("test-jaspi.xml");
System.setProperty(AuthConfigFactoryImpl.JASPI_CONFIGURATION_FILE, url.getPath());
CallbackHandler callbackHandler = null;
AuthConfigFactoryImpl.staticCallbackHandler = callbackHandler;
AuthConfigFactory.setFactory(null);
}
public void testFactory() throws Exception {
AuthConfigFactory factory1 = AuthConfigFactory.getFactory();
assertNotNull(factory1);
AuthConfigFactory factory2 = AuthConfigFactory.getFactory();
assertNotNull(factory2);
assertSame(factory1, factory2);
}
public void testBadConstructorProvider() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
try {
factory.registerConfigProvider(BadConstructorProvider.class.getName(), null, "layer1", "appContext1", "description");
fail("An exception should have been thrown");
} catch (SecurityException e) {
}
}
public void testBadImplementProvider() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
try {
factory.registerConfigProvider(BadImplementProvider.class.getName(), null, "layer2", "appContext2", "description");
fail("An exception should have been thrown");
} catch (SecurityException e) {
//e.printStackTrace();
}
}
public void testRegisterUnregister() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String regId = factory.registerConfigProvider(DummyProvider.class.getName(), null, "layer3", "appContext3", "description");
assertNotNull(regId);
RegistrationContext regContext = factory.getRegistrationContext(regId);
assertNotNull(regContext);
assertEquals("layer3", regContext.getMessageLayer());
assertEquals("appContext3", regContext.getAppContext());
assertEquals("description", regContext.getDescription());
assertTrue(factory.removeRegistration(regId));
regContext = factory.getRegistrationContext(regId);
assertNull(regContext);
}
public void testProviderWithLayerAndContext() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String registrationID = factory.registerConfigProvider(DummyProvider.class.getName(), null, "layer4", "appContext4", "description");
assertNotNull(factory.getConfigProvider("layer4", "appContext4", null));
assertNull(factory.getConfigProvider("layer4", "bad", null));
assertNull(factory.getConfigProvider("bad", "appContext4", null));
factory.removeRegistration(registrationID);
assertNull(factory.getRegistrationContext(registrationID));
}
public void testProviderWithLayer() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String registrationID = factory.registerConfigProvider(DummyProvider.class.getName(), null, "layer5", null, "description");
assertNotNull(factory.getConfigProvider("layer5", "appContext5", null));
assertNotNull(factory.getConfigProvider("layer5", "bad", null));
assertNull(factory.getConfigProvider("bad", "appContext5", null));
factory.removeRegistration(registrationID);
assertNull(factory.getRegistrationContext(registrationID));
}
public void testProviderContextLayer() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String registrationID = factory.registerConfigProvider(DummyProvider.class.getName(), null, null, "appContext6", "description");
assertNotNull(factory.getConfigProvider("layer6", "appContext6", null));
assertNull(factory.getConfigProvider("layer6", "bad", null));
assertNotNull(factory.getConfigProvider("bad", "appContext6", null));
factory.removeRegistration(registrationID);
assertNull(factory.getRegistrationContext(registrationID));
}
public void testProviderDefault() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String registrationID = factory.registerConfigProvider(DummyProvider.class.getName(), null, null, null, "description");
assertNotNull(factory.getConfigProvider("layer7", "appContext7", null));
assertNotNull(factory.getConfigProvider("layer7", "bad", null));
assertNotNull(factory.getConfigProvider("bad", "appContext7", null));
assertNotNull(factory.getConfigProvider("bad", "bad", null));
factory.removeRegistration(registrationID);
assertNull(factory.getRegistrationContext(registrationID));
}
public void testListenerOnRegister() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String registrationID = factory.registerConfigProvider(DummyProvider.class.getName(), null, null, null, "description");
DummyListener listener = new DummyListener();
assertNotNull(factory.getConfigProvider("foo", "bar", listener));
factory.registerConfigProvider(DummyProvider.class.getName(), null, null, null, "description");
assertTrue(listener.notified);
factory.removeRegistration(registrationID);
assertNull(factory.getRegistrationContext(registrationID));
}
public void testListenerOnUnregister() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String regId = factory.registerConfigProvider(DummyProvider.class.getName(), null, null, null, "description");
DummyListener listener = new DummyListener();
assertNotNull(factory.getConfigProvider("foo", "bar", listener));
factory.removeRegistration(regId);
assertTrue(listener.notified);
}
public void testWrapClientAuthModule() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
AuthModuleType<ClientAuthModule> authModuleType = new AuthModuleType<ClientAuthModule>();
authModuleType.setClassName(DummyClientAuthModule.class.getName());
AuthConfigProvider authConfigProvider = JaspiUtil.wrapClientAuthModule("layer", "appContext1", "id", authModuleType, true);
String regId = factory.registerConfigProvider(authConfigProvider, "layer", "appContext1", "description");
DummyListener listener = new DummyListener();
assertNotNull(factory.getConfigProvider("layer", "appContext1", listener));
factory.removeRegistration(regId);
assertTrue(listener.notified);
}
public void testWrapServerAuthModule() throws Exception {
AuthConfigFactory factory = AuthConfigFactory.getFactory();
AuthModuleType<ServerAuthModule> authModuleType = new AuthModuleType<ServerAuthModule>();
authModuleType.setClassName(DummyServerAuthModule.class.getName());
AuthConfigProvider authConfigProvider = JaspiUtil.wrapServerAuthModule("layer", "appContext1", "id", authModuleType, true);
String regId = factory.registerConfigProvider(authConfigProvider, "layer", "appContext1", "description");
DummyListener listener = new DummyListener();
assertNotNull(factory.getConfigProvider("layer", "appContext1", listener));
factory.removeRegistration(regId);
assertTrue(listener.notified);
}
public static class DummyListener implements RegistrationListener {
public boolean notified = true;
public void notify(String layer, String appContext) {
notified = true;
}
}
}