001: /**
002: *
003: */package org.acegisecurity.config;
004:
005: import java.lang.reflect.Field;
006: import java.util.Map;
007:
008: import junit.framework.TestCase;
009:
010: import org.acegisecurity.AuthenticationManager;
011: import org.acegisecurity.context.HttpSessionContextIntegrationFilter;
012: import org.acegisecurity.intercept.method.MethodDefinitionSource;
013: import org.acegisecurity.intercept.method.aopalliance.MethodDefinitionSourceAdvisor;
014: import org.acegisecurity.ui.logout.LogoutFilter;
015: import org.acegisecurity.ui.logout.LogoutHandler;
016: import org.acegisecurity.ui.rememberme.RememberMeProcessingFilter;
017: import org.acegisecurity.ui.rememberme.RememberMeServices;
018: import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;
019: import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
020: import org.springframework.context.ApplicationContext;
021: import org.springframework.context.support.ClassPathXmlApplicationContext;
022: import org.springframework.util.ReflectionUtils;
023:
024: /**
025: * @author Vishal Puri
026: *
027: */
028: public class AutoConfigBeanDefinitionParserTests extends TestCase {
029:
030: private ApplicationContext context;
031:
032: private ConfigurableListableBeanFactory bf;
033:
034: // ~ Methods
035: // ========================================================================================================
036:
037: public void setUp() {
038: this .context = new ClassPathXmlApplicationContext(
039: "org/acegisecurity/config/auto-config.xml");
040: this .bf = (ConfigurableListableBeanFactory) context
041: .getAutowireCapableBeanFactory();
042: }
043:
044: public void testContextBeanDefinitionCreated() {
045: String[] names = bf
046: .getBeanNamesForType(HttpSessionContextIntegrationFilter.class);
047: assertEquals(1, names.length);
048: HttpSessionContextIntegrationFilter filter = (HttpSessionContextIntegrationFilter) bf
049: .getBean(names[0]);
050: // check properties
051: // get the bean
052: assertTrue(filter.isAllowSessionCreation());
053: assertFalse(filter.isForceEagerSessionCreation());
054: assertFalse(filter.isCloneFromHttpSession());
055: }
056:
057: public void testLogoutFilterDefinitionCreatedWithDefaults()
058: throws Exception {
059: String[] names = bf.getBeanNamesForType(LogoutFilter.class);
060: assertEquals(1, names.length);
061: LogoutFilter filter = (LogoutFilter) context.getBean(names[0]);
062: assertNotNull(filter);
063: Field logoutSuccessUrl = makeAccessibleAndGetFieldByName(filter
064: .getClass().getDeclaredFields(), "logoutSuccessUrl");
065: String value = (String) logoutSuccessUrl.get(filter);
066: assertEquals("/", value);
067: Field handlers = makeAccessibleAndGetFieldByName(filter
068: .getClass().getDeclaredFields(), "handlers");
069: assertNotNull(handlers);
070: LogoutHandler[] handlersArray = (LogoutHandler[]) handlers
071: .get(filter);
072: assertEquals(2, handlersArray.length);
073: }
074:
075: public void testExceptionTranslationFilterCreatedwithDefaults()
076: throws Exception {
077: Map map = bf
078: .getBeansOfType(AuthenticationProcessingFilter.class);
079: AuthenticationProcessingFilter filter = (AuthenticationProcessingFilter) map
080: .values().iterator().next();
081: AuthenticationManager authMgr = filter
082: .getAuthenticationManager();
083: assertNotNull(authMgr);
084: RememberMeServices remMeServices = filter
085: .getRememberMeServices();
086: assertNotNull(remMeServices);
087: assertEquals("/acegilogin.jsp?login_error=1", filter
088: .getAuthenticationFailureUrl());
089: assertEquals("/", filter.getDefaultTargetUrl());
090: }
091:
092: public void testRememberMePRocessingFilterCreatedWithDefaults() {
093: Map map = bf.getBeansOfType(RememberMeProcessingFilter.class);
094: RememberMeProcessingFilter filter = (RememberMeProcessingFilter) map
095: .values().iterator().next();
096: }
097:
098: public void testMethodDefinitionSourceAdvisorCreatedWithDefaults()
099: throws Exception {
100: Map map = bf
101: .getBeansOfType(MethodDefinitionSourceAdvisor.class);
102: assertEquals(1, map.size());
103: MethodDefinitionSourceAdvisor advisor = (MethodDefinitionSourceAdvisor) map
104: .values().iterator().next();
105: Field transactionAttributeSource = makeAccessibleAndGetFieldByName(
106: advisor.getClass().getDeclaredFields(),
107: "transactionAttributeSource");
108: assertNotNull(transactionAttributeSource);
109: assertTrue(transactionAttributeSource.get(advisor) instanceof MethodDefinitionSource);
110: }
111:
112: private Field makeAccessibleAndGetFieldByName(
113: Field[] declaredFields, String name) {
114: Field field = null;
115: for (int i = 0, n = declaredFields.length; i < n; i++) {
116: ReflectionUtils.makeAccessible(declaredFields[i]);
117: if (declaredFields[i].getName().equals(name)) {
118: return declaredFields[i];
119: }
120: }
121: return field;
122: }
123:
124: }
|