1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.providers.cas.populator;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.GrantedAuthority;
21 import org.acegisecurity.GrantedAuthorityImpl;
22 import org.acegisecurity.userdetails.UserDetailsService;
23 import org.acegisecurity.userdetails.User;
24 import org.acegisecurity.userdetails.UserDetails;
25 import org.acegisecurity.userdetails.UsernameNotFoundException;
26
27 import org.springframework.dao.DataAccessException;
28 import org.springframework.dao.DataRetrievalFailureException;
29
30
31 /***
32 * Tests {@link DaoCasAuthoritiesPopulator}.
33 *
34 * @author Ben Alex
35 * @version $Id: DaoCasAuthoritiesPopulatorTests.java,v 1.9 2005/11/30 00:20:11 benalex Exp $
36 */
37 public class DaoCasAuthoritiesPopulatorTests extends TestCase {
38
39
40 public DaoCasAuthoritiesPopulatorTests() {
41 super();
42 }
43
44 public DaoCasAuthoritiesPopulatorTests(String arg0) {
45 super(arg0);
46 }
47
48
49
50 public final void setUp() throws Exception {
51 super.setUp();
52 }
53
54 public static void main(String[] args) {
55 junit.textui.TestRunner.run(DaoCasAuthoritiesPopulatorTests.class);
56 }
57
58 public void testDetectsMissingAuthenticationDao() throws Exception {
59 DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
60
61 try {
62 populator.afterPropertiesSet();
63 fail("Should have thrown IllegalArgumentException");
64 } catch (IllegalArgumentException expected) {
65 assertEquals("An authenticationDao must be set",
66 expected.getMessage());
67 }
68 }
69
70 public void testGetGrantedAuthoritiesForInvalidUsername()
71 throws Exception {
72 DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
73 populator.setUserDetailsService(new MockAuthenticationDaoUserMarissa());
74 populator.afterPropertiesSet();
75
76 try {
77 populator.getUserDetails("scott");
78 fail("Should have thrown UsernameNotFoundException");
79 } catch (UsernameNotFoundException expected) {
80 assertTrue(true);
81 }
82 }
83
84 public void testGetGrantedAuthoritiesForValidUsername()
85 throws Exception {
86 DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
87 populator.setUserDetailsService(new MockAuthenticationDaoUserMarissa());
88 populator.afterPropertiesSet();
89
90 UserDetails results = populator.getUserDetails("marissa");
91 assertEquals(2, results.getAuthorities().length);
92 assertEquals(new GrantedAuthorityImpl("ROLE_ONE"),
93 results.getAuthorities()[0]);
94 assertEquals(new GrantedAuthorityImpl("ROLE_TWO"),
95 results.getAuthorities()[1]);
96 }
97
98 public void testGetGrantedAuthoritiesWhenDaoThrowsException()
99 throws Exception {
100 DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
101 populator.setUserDetailsService(new MockAuthenticationDaoSimulateBackendError());
102 populator.afterPropertiesSet();
103
104 try {
105 populator.getUserDetails("THE_DAO_WILL_FAIL");
106 fail("Should have thrown DataRetrievalFailureException");
107 } catch (DataRetrievalFailureException expected) {
108 assertTrue(true);
109 }
110 }
111
112 public void testGettersSetters() {
113 DaoCasAuthoritiesPopulator populator = new DaoCasAuthoritiesPopulator();
114 UserDetailsService dao = new MockAuthenticationDaoUserMarissa();
115 populator.setUserDetailsService(dao);
116 assertEquals(dao, populator.getUserDetailsService());
117 }
118
119
120
121 private class MockAuthenticationDaoSimulateBackendError
122 implements UserDetailsService {
123 public long getRefreshDuration() {
124 return 0;
125 }
126
127 public UserDetails loadUserByUsername(String username)
128 throws UsernameNotFoundException, DataAccessException {
129 throw new DataRetrievalFailureException(
130 "This mock simulator is designed to fail");
131 }
132 }
133
134 private class MockAuthenticationDaoUserMarissa implements UserDetailsService {
135 public long getRefreshDuration() {
136 return 0;
137 }
138
139 public UserDetails loadUserByUsername(String username)
140 throws UsernameNotFoundException, DataAccessException {
141 if ("marissa".equals(username)) {
142 return new User("marissa", "koala", true, true, true, true,
143 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
144 "ROLE_TWO")});
145 } else {
146 throw new UsernameNotFoundException("Could not find: "
147 + username);
148 }
149 }
150 }
151 }