1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.adapters.resin;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.GrantedAuthority;
21 import org.acegisecurity.GrantedAuthorityImpl;
22
23 import org.acegisecurity.adapters.PrincipalAcegiUserToken;
24
25 import java.security.Principal;
26
27 import javax.servlet.ServletException;
28
29
30 /***
31 * Tests {@link ResinAcegiAuthenticator}.
32 *
33 * @author Ben Alex
34 * @version $Id: ResinAcegiAuthenticatorTests.java,v 1.4 2005/11/25 00:26:30 benalex Exp $
35 */
36 public class ResinAcegiAuthenticatorTests extends TestCase {
37
38
39 private final String ADAPTER_KEY = "my_key";
40
41
42
43 public ResinAcegiAuthenticatorTests() {
44 super();
45 }
46
47 public ResinAcegiAuthenticatorTests(String arg0) {
48 super(arg0);
49 }
50
51
52
53 public final void setUp() throws Exception {
54 super.setUp();
55 }
56
57 public static void main(String[] args) {
58 junit.textui.TestRunner.run(ResinAcegiAuthenticatorTests.class);
59 }
60
61 public void testAdapterAbortsIfAppContextDoesNotContainAnAuthenticationBean()
62 throws Exception {
63 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
64 adapter.setAppContextLocation(
65 "org/acegisecurity/adapters/adaptertest-invalid.xml");
66 adapter.setKey(ADAPTER_KEY);
67
68 try {
69 adapter.init();
70 fail("Should have thrown ServletException");
71 } catch (ServletException expected) {
72 assertEquals("Bean context must contain at least one bean of type AuthenticationManager",
73 expected.getMessage());
74 }
75 }
76
77 public void testAdapterAbortsIfNoAppContextSpecified()
78 throws Exception {
79 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
80 adapter.setKey(ADAPTER_KEY);
81
82 try {
83 adapter.init();
84 fail("Should have thrown ServletException");
85 } catch (ServletException expected) {
86 assertEquals("appContextLocation must be defined",
87 expected.getMessage());
88 }
89
90 adapter.setAppContextLocation("");
91
92 try {
93 adapter.init();
94 fail("Should have thrown ServletException");
95 } catch (ServletException expected) {
96 assertEquals("appContextLocation must be defined",
97 expected.getMessage());
98 }
99 }
100
101 public void testAdapterAbortsIfNoKeySpecified() throws Exception {
102 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
103 adapter.setAppContextLocation(
104 "org/acegisecurity/adapters/adaptertest-valid.xml");
105
106 try {
107 adapter.init();
108 fail("Should have thrown ServletException");
109 } catch (ServletException expected) {
110 assertEquals("key must be defined", expected.getMessage());
111 }
112
113 adapter.setKey("");
114
115 try {
116 adapter.init();
117 fail("Should have thrown ServletException");
118 } catch (ServletException expected) {
119 assertEquals("key must be defined", expected.getMessage());
120 }
121 }
122
123 public void testAdapterAbortsWithIncorrectApplicationContextLocation()
124 throws Exception {
125 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
126 adapter.setAppContextLocation("FILE_DOES_NOT_EXIST");
127 adapter.setKey(ADAPTER_KEY);
128
129 try {
130 adapter.init();
131 fail("Should have thrown ServletException");
132 } catch (ServletException expected) {
133 assertTrue(expected.getMessage().startsWith("Cannot locate"));
134 }
135 }
136
137 public void testAdapterStartsUpSuccess() throws Exception {
138 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
139 adapter.setAppContextLocation(
140 "org/acegisecurity/adapters/adaptertest-valid.xml");
141 adapter.setKey(ADAPTER_KEY);
142 adapter.init();
143 assertTrue(true);
144 }
145
146 public void testAuthenticationFailsForIncorrectPassword()
147 throws Exception {
148 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
149 adapter.setAppContextLocation(
150 "org/acegisecurity/adapters/adaptertest-valid.xml");
151 adapter.setKey(ADAPTER_KEY);
152 adapter.init();
153 assertEquals(null, adapter.loginImpl("marissa", "kangaroo"));
154 }
155
156 public void testAuthenticationFailsForIncorrectUserName()
157 throws Exception {
158 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
159 adapter.setAppContextLocation(
160 "org/acegisecurity/adapters/adaptertest-valid.xml");
161 adapter.setKey(ADAPTER_KEY);
162 adapter.init();
163 assertEquals(null, adapter.loginImpl("melissa", "koala"));
164 }
165
166 public void testAuthenticationSuccess() throws Exception {
167 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
168 adapter.setAppContextLocation(
169 "org/acegisecurity/adapters/adaptertest-valid.xml");
170 adapter.setKey(ADAPTER_KEY);
171 adapter.init();
172
173 Principal result = adapter.loginImpl("marissa", "koala");
174
175 if (!(result instanceof PrincipalAcegiUserToken)) {
176 fail("Should have returned PrincipalAcegiUserToken");
177 }
178
179 PrincipalAcegiUserToken castResult = (PrincipalAcegiUserToken) result;
180 assertEquals("marissa", castResult.getPrincipal());
181 assertEquals("koala", castResult.getCredentials());
182 assertEquals("ROLE_TELLER",
183 castResult.getAuthorities()[0].getAuthority());
184 assertEquals("ROLE_SUPERVISOR",
185 castResult.getAuthorities()[1].getAuthority());
186 assertEquals(ADAPTER_KEY.hashCode(), castResult.getKeyHash());
187 }
188
189 public void testAuthenticationSuccessUsingAlternateMethod()
190 throws Exception {
191 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
192 adapter.setAppContextLocation(
193 "org/acegisecurity/adapters/adaptertest-valid.xml");
194 adapter.setKey(ADAPTER_KEY);
195 adapter.init();
196
197 Principal result = adapter.loginImpl(null, null, null, "marissa",
198 "koala");
199
200 if (!(result instanceof PrincipalAcegiUserToken)) {
201 fail("Should have returned PrincipalAcegiUserToken");
202 }
203
204 PrincipalAcegiUserToken castResult = (PrincipalAcegiUserToken) result;
205 assertEquals("marissa", castResult.getPrincipal());
206 assertEquals("koala", castResult.getCredentials());
207 assertEquals("ROLE_TELLER",
208 castResult.getAuthorities()[0].getAuthority());
209 assertEquals("ROLE_SUPERVISOR",
210 castResult.getAuthorities()[1].getAuthority());
211 assertEquals(ADAPTER_KEY.hashCode(), castResult.getKeyHash());
212 }
213
214 public void testAuthenticationWithNullPasswordHandledGracefully()
215 throws Exception {
216 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
217 adapter.setAppContextLocation(
218 "org/acegisecurity/adapters/adaptertest-valid.xml");
219 adapter.setKey(ADAPTER_KEY);
220 adapter.init();
221 assertEquals(null, adapter.loginImpl("marissa", null));
222 }
223
224 public void testAuthenticationWithNullUserNameHandledGracefully()
225 throws Exception {
226 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
227 adapter.setAppContextLocation(
228 "org/acegisecurity/adapters/adaptertest-valid.xml");
229 adapter.setKey(ADAPTER_KEY);
230 adapter.init();
231 assertEquals(null, adapter.loginImpl(null, "koala"));
232 }
233
234 public void testGetters() throws Exception {
235 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
236 adapter.setAppContextLocation(
237 "org/acegisecurity/adapters/adaptertest-valid.xml");
238 adapter.setKey(ADAPTER_KEY);
239 assertEquals(ADAPTER_KEY, adapter.getKey());
240 assertEquals("org/acegisecurity/adapters/adaptertest-valid.xml",
241 adapter.getAppContextLocation());
242 }
243
244 public void testHasRoleWithANullPrincipalFails() throws Exception {
245 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
246 adapter.setAppContextLocation(
247 "org/acegisecurity/adapters/adaptertest-valid.xml");
248 adapter.setKey(ADAPTER_KEY);
249 adapter.init();
250 assertTrue(!adapter.isUserInRole(null, null, null, null, "ROLE_ONE"));
251 }
252
253 public void testHasRoleWithAPrincipalTheAdapterDidNotCreateFails()
254 throws Exception {
255 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
256 adapter.setAppContextLocation(
257 "org/acegisecurity/adapters/adaptertest-valid.xml");
258 adapter.setKey(ADAPTER_KEY);
259 adapter.init();
260 assertTrue(!adapter.isUserInRole(null, null, null,
261 new Principal() {
262 public String getName() {
263 return "MockPrincipal";
264 }
265 }, "ROLE_ONE"));
266 }
267
268 public void testHasRoleWithPrincipalAcegiUserToken()
269 throws Exception {
270 PrincipalAcegiUserToken token = new PrincipalAcegiUserToken("KEY",
271 "Test", "Password",
272 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl(
273 "ROLE_TWO")}, null);
274 ResinAcegiAuthenticator adapter = new ResinAcegiAuthenticator();
275 adapter.setAppContextLocation(
276 "org/acegisecurity/adapters/adaptertest-valid.xml");
277 adapter.setKey(ADAPTER_KEY);
278 adapter.init();
279 assertTrue(adapter.isUserInRole(null, null, null, token, "ROLE_ONE"));
280 assertTrue(adapter.isUserInRole(null, null, null, token, "ROLE_ONE"));
281 assertTrue(!adapter.isUserInRole(null, null, null, token,
282 "ROLE_WE_DO_NOT_HAVE"));
283 }
284 }