1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.taglibs.authz;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.Authentication;
21 import org.acegisecurity.GrantedAuthority;
22 import org.acegisecurity.context.SecurityContextHolder;
23 import org.acegisecurity.providers.TestingAuthenticationToken;
24 import org.acegisecurity.userdetails.User;
25
26 import javax.servlet.jsp.JspException;
27 import javax.servlet.jsp.tagext.Tag;
28
29
30 /***
31 * Tests {@link AuthenticationTag}.
32 *
33 * @author Ben Alex
34 * @version $Id: AuthenticationTagTests.java,v 1.9 2005/11/29 13:10:11 benalex Exp $
35 */
36 public class AuthenticationTagTests extends TestCase {
37
38
39 private final MyAuthenticationTag authenticationTag = new MyAuthenticationTag();
40
41
42
43 public void testOperationAndMethodPrefixWhenPrincipalIsAUserDetailsInstance()
44 throws JspException {
45 Authentication auth = new TestingAuthenticationToken(new User(
46 "marissaUserDetails", "koala", true, true, true, true,
47 new GrantedAuthority[] {}), "koala",
48 new GrantedAuthority[] {});
49 SecurityContextHolder.getContext().setAuthentication(auth);
50
51 authenticationTag.setOperation("username");
52 authenticationTag.setMethodPrefix("get");
53 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
54 assertEquals("marissaUserDetails", authenticationTag.getLastMessage());
55 }
56
57 public void testOperationWhenPrincipalIsAString() throws JspException {
58 Authentication auth = new TestingAuthenticationToken("marissaAsString",
59 "koala", new GrantedAuthority[] {});
60 SecurityContextHolder.getContext().setAuthentication(auth);
61
62 authenticationTag.setOperation("principal");
63 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
64 assertEquals("marissaAsString", authenticationTag.getLastMessage());
65 }
66
67 public void testOperationWhenPrincipalIsAUserDetailsInstance()
68 throws JspException {
69 Authentication auth = new TestingAuthenticationToken(new User(
70 "marissaUserDetails", "koala", true, true, true, true,
71 new GrantedAuthority[] {}), "koala",
72 new GrantedAuthority[] {});
73 SecurityContextHolder.getContext().setAuthentication(auth);
74
75 authenticationTag.setOperation("username");
76 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
77 assertEquals("marissaUserDetails", authenticationTag.getLastMessage());
78 }
79
80 public void testOperationWhenPrincipalIsNull() throws JspException {
81 Authentication auth = new TestingAuthenticationToken(null, "koala",
82 new GrantedAuthority[] {});
83 SecurityContextHolder.getContext().setAuthentication(auth);
84
85 authenticationTag.setOperation("principal");
86 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
87 }
88
89 public void testOperationWhenSecurityContextIsNull()
90 throws JspException {
91 SecurityContextHolder.getContext().setAuthentication(null);
92
93 authenticationTag.setOperation("principal");
94 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
95 assertEquals(null, authenticationTag.getLastMessage());
96
97 SecurityContextHolder.getContext().setAuthentication(null);
98 }
99
100 public void testSkipsBodyIfNullOrEmptyOperation() throws Exception {
101 authenticationTag.setOperation("");
102 assertEquals("", authenticationTag.getOperation());
103 assertEquals(Tag.SKIP_BODY, authenticationTag.doStartTag());
104 }
105
106 public void testThrowsExceptionForUnrecognisedMethodPrefix() {
107 Authentication auth = new TestingAuthenticationToken(new User(
108 "marissaUserDetails", "koala", true, true, true, true,
109 new GrantedAuthority[] {}), "koala",
110 new GrantedAuthority[] {});
111 SecurityContextHolder.getContext().setAuthentication(auth);
112 authenticationTag.setOperation("username");
113 authenticationTag.setMethodPrefix("qrq");
114
115 try {
116 authenticationTag.doStartTag();
117 fail("Should have thrown a JspException");
118 } catch (JspException expected) {
119 assertTrue(true);
120 }
121 }
122
123 public void testThrowsExceptionForUnrecognisedOperation() {
124 Authentication auth = new TestingAuthenticationToken(new User(
125 "marissaUserDetails", "koala", true, true, true, true,
126 new GrantedAuthority[] {}), "koala",
127 new GrantedAuthority[] {});
128 SecurityContextHolder.getContext().setAuthentication(auth);
129 authenticationTag.setOperation("qsq");
130
131 try {
132 authenticationTag.doStartTag();
133 fail("Should have throwns JspException");
134 } catch (JspException expected) {
135 assertTrue(true);
136 }
137 }
138
139
140
141 private class MyAuthenticationTag extends AuthenticationTag {
142 String lastMessage = null;
143
144 public String getLastMessage() {
145 return lastMessage;
146 }
147
148 protected void writeMessage(String msg) throws JspException {
149 lastMessage = msg;
150 }
151 }
152 }