001: /**
002: *
003: */package org.acegisecurity.config;
004:
005: import junit.framework.TestCase;
006:
007: import org.acegisecurity.providers.AuthenticationProvider;
008: import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
009: import org.acegisecurity.providers.dao.SaltSource;
010: import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
011: import org.acegisecurity.providers.encoding.PasswordEncoder;
012: import org.acegisecurity.providers.encoding.PlaintextPasswordEncoder;
013: import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
014: import org.springframework.beans.PropertyValue;
015: import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
016: import org.springframework.beans.factory.config.RuntimeBeanReference;
017: import org.springframework.beans.factory.support.RootBeanDefinition;
018: import org.springframework.context.ApplicationContext;
019: import org.springframework.context.support.ClassPathXmlApplicationContext;
020: import org.springframework.util.Assert;
021:
022: /**
023: * @author vpuri
024: *
025: */
026: public class AuthenticationRepositoryParserTest extends TestCase {
027:
028: public void testAuthenticationRepositoryDefaultWithAutoUserdetails() {
029: ApplicationContext context = new ClassPathXmlApplicationContext(
030: "org/acegisecurity/config/authentication-dao-defaults.xml");
031: ConfigurableListableBeanFactory clbf = (ConfigurableListableBeanFactory) context
032: .getAutowireCapableBeanFactory();
033:
034: String[] names = clbf
035: .getBeanNamesForType(AuthenticationProvider.class);
036: assertEquals(1, names.length);
037:
038: // check bean class
039: RootBeanDefinition definition = (RootBeanDefinition) clbf
040: .getBeanDefinition(names[0]);
041: assertEquals(DaoAuthenticationProvider.class, definition
042: .getBeanClass());
043:
044: DaoAuthenticationProvider provider = (DaoAuthenticationProvider) context
045: .getBean("authenticationRepository");
046: Assert.isAssignable(JdbcDaoImpl.class, provider
047: .getUserDetailsService().getClass());
048:
049: }
050:
051: public void testCollaboratorsAsInnerBeans() {
052: ApplicationContext context = new ClassPathXmlApplicationContext(
053: "org/acegisecurity/config/authentication-innerbeans.xml");
054: ConfigurableListableBeanFactory clbf = (ConfigurableListableBeanFactory) context
055: .getAutowireCapableBeanFactory();
056: // get the main bean definition, there should be only one
057: String[] names = clbf
058: .getBeanNamesForType(AuthenticationProvider.class);
059: assertEquals(1, names.length);
060: RootBeanDefinition definition = (RootBeanDefinition) clbf
061: .getBeanDefinition(names[0]);
062: assertEquals(DaoAuthenticationProvider.class, definition
063: .getBeanClass());
064:
065: // get the 2 inner beans
066: PropertyValue saltSourceBean = definition.getPropertyValues()
067: .getPropertyValue("saltSource");
068: assertEquals("saltSource", saltSourceBean.getName());
069:
070: // get the BeanDefinition
071: RootBeanDefinition saltsourceDef = (RootBeanDefinition) saltSourceBean
072: .getValue();
073: Assert.isAssignable(SaltSource.class, saltsourceDef
074: .getBeanClass());
075:
076: PropertyValue encoder = definition.getPropertyValues()
077: .getPropertyValue("passwordEncoder");
078: assertEquals("passwordEncoder", encoder.getName());
079:
080: // get the BeanDefinition
081: RootBeanDefinition encoderDef = (RootBeanDefinition) encoder
082: .getValue();
083: Assert.isAssignable(PasswordEncoder.class, encoderDef
084: .getBeanClass());
085:
086: assertEquals("incorrect bean class name", encoderDef
087: .getBeanClassName(), Md5PasswordEncoder.class.getName());
088: }
089:
090: public void testCollaboratorsAsBeanRef() {
091: ApplicationContext context = new ClassPathXmlApplicationContext(
092: "org/acegisecurity/config/authentication-beanRef-attributes.xml");
093: ConfigurableListableBeanFactory clbf = (ConfigurableListableBeanFactory) context
094: .getAutowireCapableBeanFactory();
095: // get the main bean definition, there should be only one
096: String[] names = clbf
097: .getBeanNamesForType(AuthenticationProvider.class);
098: assertEquals(1, names.length);
099: RootBeanDefinition definition = (RootBeanDefinition) clbf
100: .getBeanDefinition(names[0]);
101: assertEquals(DaoAuthenticationProvider.class, definition
102: .getBeanClass());
103:
104: // get the referred collaborators
105:
106: PropertyValue userDetailsBean = definition.getPropertyValues()
107: .getPropertyValue("userDetailsService");
108: assertEquals("userDetailsService", userDetailsBean.getName());
109:
110: PropertyValue saltSourceBean = definition.getPropertyValues()
111: .getPropertyValue("saltSource");
112: assertEquals("saltSource", saltSourceBean.getName());
113:
114: // get the BeanDefinition
115: RuntimeBeanReference saltsourceDef = (RuntimeBeanReference) saltSourceBean
116: .getValue();
117: assertEquals("refToSaltSource", saltsourceDef.getBeanName());
118:
119: PropertyValue encoder = definition.getPropertyValues()
120: .getPropertyValue("passwordEncoder");
121: assertEquals("passwordEncoder", encoder.getName());
122:
123: // get the BeanDefinition
124: RuntimeBeanReference encoderDef = (RuntimeBeanReference) encoder
125: .getValue();
126: assertEquals("refToPasswordEncoder", encoderDef.getBeanName());
127:
128: DaoAuthenticationProvider provider = (DaoAuthenticationProvider) context
129: .getBean("authenticationRepository");
130: assertTrue(provider.getPasswordEncoder() instanceof PasswordEncoder);
131: assertEquals(Md5PasswordEncoder.class, provider
132: .getPasswordEncoder().getClass());
133: }
134:
135: public void testAutodetectionOfUserDetailsService() {
136: ApplicationContext context = new ClassPathXmlApplicationContext(
137: "org/acegisecurity/config/authentication-defaults.xml");
138: DaoAuthenticationProvider provider = (DaoAuthenticationProvider) context
139: .getBean("authenticationRepository");
140: assertNotNull(provider.getUserDetailsService());
141: assertNull(provider.getSaltSource());
142: assertEquals(PlaintextPasswordEncoder.class, provider
143: .getPasswordEncoder().getClass());
144:
145: }
146: }
|