1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.acl;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.Authentication;
21 import org.acegisecurity.GrantedAuthority;
22 import org.acegisecurity.GrantedAuthorityImpl;
23 import org.acegisecurity.acl.basic.NamedEntityObjectIdentity;
24 import org.acegisecurity.acl.basic.SimpleAclEntry;
25 import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
26
27 import java.util.List;
28 import java.util.Vector;
29
30
31 /***
32 * Tests {@link AclProviderManager}.
33 *
34 * @author Ben Alex
35 * @version $Id: AclProviderManagerTests.java,v 1.2 2005/11/17 00:56:07 benalex Exp $
36 */
37 public class AclProviderManagerTests extends TestCase {
38
39
40 public AclProviderManagerTests() {
41 super();
42 }
43
44 public AclProviderManagerTests(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(AclProviderManagerTests.class);
56 }
57
58 public void testAclLookupFails() {
59 AclProviderManager mgr = makeProviderManager();
60 assertNull(mgr.getAcls(new Integer(5)));
61 }
62
63 public void testAclLookupForGivenAuthenticationSuccess() {
64 AclProviderManager mgr = makeProviderManager();
65 assertNotNull(mgr.getAcls("STRING",
66 new UsernamePasswordAuthenticationToken("marissa", "not used")));
67 }
68
69 public void testAclLookupSuccess() {
70 AclProviderManager mgr = makeProviderManager();
71 assertNotNull(mgr.getAcls("STRING"));
72 }
73
74 public void testRejectsNulls() {
75 AclProviderManager mgr = new AclProviderManager();
76
77 try {
78 mgr.getAcls(null);
79 fail("Should have thrown IllegalArgumentException");
80 } catch (IllegalArgumentException expected) {
81 assertTrue(true);
82 }
83
84 try {
85 mgr.getAcls(null,
86 new UsernamePasswordAuthenticationToken("marissa", "not used"));
87 fail("Should have thrown IllegalArgumentException");
88 } catch (IllegalArgumentException expected) {
89 assertTrue(true);
90 }
91
92 try {
93 mgr.getAcls("SOME_DOMAIN_INSTANCE", null);
94 fail("Should have thrown IllegalArgumentException");
95 } catch (IllegalArgumentException expected) {
96 assertTrue(true);
97 }
98 }
99
100 public void testReturnsNullIfNoSupportingProvider() {
101 AclProviderManager mgr = makeProviderManager();
102 assertNull(mgr.getAcls(new Integer(4),
103 new UsernamePasswordAuthenticationToken("marissa", "not used")));
104 assertNull(mgr.getAcls(new Integer(4)));
105 }
106
107 public void testStartupFailsIfProviderListNotContainingProviders()
108 throws Exception {
109 List providers = new Vector();
110 providers.add("THIS_IS_NOT_A_PROVIDER");
111
112 AclProviderManager mgr = new AclProviderManager();
113
114 try {
115 mgr.setProviders(providers);
116 fail("Should have thrown IllegalArgumentException");
117 } catch (IllegalArgumentException expected) {
118 assertTrue(true);
119 }
120 }
121
122 public void testStartupFailsIfProviderListNotSet()
123 throws Exception {
124 AclProviderManager mgr = new AclProviderManager();
125
126 try {
127 mgr.afterPropertiesSet();
128 fail("Should have thrown IllegalArgumentException");
129 } catch (IllegalArgumentException expected) {
130 assertTrue(true);
131 }
132 }
133
134 public void testStartupFailsIfProviderListNull() throws Exception {
135 AclProviderManager mgr = new AclProviderManager();
136
137 try {
138 mgr.setProviders(null);
139 fail("Should have thrown IllegalArgumentException");
140 } catch (IllegalArgumentException expected) {
141 assertTrue(true);
142 }
143 }
144
145 public void testSuccessfulStartup() throws Exception {
146 AclProviderManager mgr = makeProviderManager();
147 mgr.afterPropertiesSet();
148 assertTrue(true);
149 assertEquals(1, mgr.getProviders().size());
150 }
151
152 private AclProviderManager makeProviderManager() {
153 MockProvider provider1 = new MockProvider();
154 List providers = new Vector();
155 providers.add(provider1);
156
157 AclProviderManager mgr = new AclProviderManager();
158 mgr.setProviders(providers);
159
160 return mgr;
161 }
162
163
164
165 private class MockProvider implements AclProvider {
166 private UsernamePasswordAuthenticationToken marissa = new UsernamePasswordAuthenticationToken("marissa",
167 "not used",
168 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_FOO"), new GrantedAuthorityImpl("ROLE_BAR")});
169 private SimpleAclEntry entry100Marissa = new SimpleAclEntry(marissa
170 .getPrincipal(),
171 new NamedEntityObjectIdentity("OBJECT", "100"), null, 2);
172 private UsernamePasswordAuthenticationToken scott = new UsernamePasswordAuthenticationToken("scott",
173 "not used",
174 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_FOO"), new GrantedAuthorityImpl("ROLE_MANAGER")});
175 private SimpleAclEntry entry100Scott = new SimpleAclEntry(scott
176 .getPrincipal(),
177 new NamedEntityObjectIdentity("OBJECT", "100"), null, 4);
178
179 public AclEntry[] getAcls(Object domainInstance,
180 Authentication authentication) {
181 if (authentication.getPrincipal().equals(scott.getPrincipal())) {
182 return new AclEntry[] {entry100Scott};
183 }
184
185 if (authentication.getPrincipal().equals(marissa.getPrincipal())) {
186 return new AclEntry[] {entry100Marissa};
187 }
188
189 return null;
190 }
191
192 public AclEntry[] getAcls(Object domainInstance) {
193 return new AclEntry[] {entry100Marissa, entry100Scott};
194 }
195
196 /***
197 * Only supports <code>Object</code>s of type <code>String</code>
198 *
199 * @param domainInstance DOCUMENT ME!
200 *
201 * @return DOCUMENT ME!
202 */
203 public boolean supports(Object domainInstance) {
204 return (domainInstance instanceof String);
205 }
206 }
207 }