1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.providers.x509.populator;
17
18 import java.security.cert.X509Certificate;
19
20 import junit.framework.TestCase;
21
22 import org.acegisecurity.BadCredentialsException;
23 import org.acegisecurity.GrantedAuthority;
24 import org.acegisecurity.GrantedAuthorityImpl;
25 import org.acegisecurity.providers.x509.X509TestUtils;
26 import org.acegisecurity.userdetails.User;
27 import org.acegisecurity.userdetails.UserDetails;
28 import org.acegisecurity.userdetails.UserDetailsService;
29 import org.acegisecurity.userdetails.UsernameNotFoundException;
30 import org.springframework.dao.DataAccessException;
31
32
33 /***
34 * DOCUMENT ME!
35 *
36 * @author Luke Taylor
37 */
38 public class DaoX509AuthoritiesPopulatorTests extends TestCase {
39
40
41 public DaoX509AuthoritiesPopulatorTests() {
42 super();
43 }
44
45 public DaoX509AuthoritiesPopulatorTests(String arg0) {
46 super(arg0);
47 }
48
49
50
51 public final void setUp() throws Exception {
52 super.setUp();
53 }
54
55 public void testDefaultCNPatternMatch() throws Exception {
56 X509Certificate cert = X509TestUtils.buildTestCertificate();
57 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
58
59 populator.setUserDetailsService(new MockAuthenticationDaoMatchesNameOrEmail());
60 populator.afterPropertiesSet();
61 populator.getUserDetails(cert);
62 }
63
64 public void testEmailPatternMatch() throws Exception {
65 X509Certificate cert = X509TestUtils.buildTestCertificate();
66 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
67
68 populator.setUserDetailsService(new MockAuthenticationDaoMatchesNameOrEmail());
69 populator.setSubjectDNRegex("emailAddress=(.*?),");
70 populator.afterPropertiesSet();
71 populator.getUserDetails(cert);
72 }
73
74 public void testInvalidRegexFails() throws Exception {
75 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
76 populator.setUserDetailsService(new MockAuthenticationDaoMatchesNameOrEmail());
77 populator.setSubjectDNRegex("CN=(.*?,");
78
79 try {
80 populator.afterPropertiesSet();
81 fail("Should have thrown IllegalArgumentException");
82 } catch (IllegalArgumentException failed) {
83
84 }
85 }
86
87 public void testMatchOnShoeSizeFieldInDNFails() throws Exception {
88 X509Certificate cert = X509TestUtils.buildTestCertificate();
89 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
90
91 populator.setUserDetailsService(new MockAuthenticationDaoMatchesNameOrEmail());
92 populator.setSubjectDNRegex("shoeSize=(.*?),");
93 populator.afterPropertiesSet();
94
95 try {
96 populator.getUserDetails(cert);
97 fail("Should have thrown BadCredentialsException.");
98 } catch (BadCredentialsException failed) {
99
100 }
101 }
102
103 public void testPatternWithNoGroupFails() throws Exception {
104 X509Certificate cert = X509TestUtils.buildTestCertificate();
105 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
106
107 populator.setUserDetailsService(new MockAuthenticationDaoMatchesNameOrEmail());
108 populator.setSubjectDNRegex("CN=.*?,");
109 populator.afterPropertiesSet();
110
111 try {
112 populator.getUserDetails(cert);
113 fail(
114 "Should have thrown IllegalArgumentException for regexp without group");
115 } catch (IllegalArgumentException e) {
116
117 }
118 }
119
120 public void testRequiresDao() throws Exception {
121 DaoX509AuthoritiesPopulator populator = new DaoX509AuthoritiesPopulator();
122
123 try {
124 populator.afterPropertiesSet();
125 fail("Should have thrown IllegalArgumentException");
126 } catch (IllegalArgumentException failed) {
127
128 }
129 }
130
131
132
133 private class MockAuthenticationDaoMatchesNameOrEmail
134 implements UserDetailsService {
135 public UserDetails loadUserByUsername(String username)
136 throws UsernameNotFoundException, DataAccessException {
137 if ("Luke Taylor".equals(username)
138 || "luke@monkeymachine".equals(username)) {
139 return new User("luke", "monkey", true, true, true, true,
140 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE")});
141 } else {
142 throw new UsernameNotFoundException("Could not find: "
143 + username);
144 }
145 }
146 }
147 }