1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.vote;
17
18 import java.util.List;
19 import java.util.Vector;
20
21 import junit.framework.TestCase;
22
23 import org.acegisecurity.AccessDeniedException;
24 import org.acegisecurity.ConfigAttributeDefinition;
25 import org.acegisecurity.GrantedAuthority;
26 import org.acegisecurity.GrantedAuthorityImpl;
27 import org.acegisecurity.SecurityConfig;
28 import org.acegisecurity.providers.TestingAuthenticationToken;
29
30
31 /***
32 * Tests {@link AffirmativeBased}.
33 *
34 * @author Ben Alex
35 * @version $Id: AffirmativeBasedTests.java,v 1.5 2005/11/30 01:23:34 benalex Exp $
36 */
37 public class AffirmativeBasedTests extends TestCase {
38
39
40 public AffirmativeBasedTests() {
41 super();
42 }
43
44 public AffirmativeBasedTests(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(AffirmativeBasedTests.class);
56 }
57
58 public void testOneAffirmativeVoteOneDenyVoteOneAbstainVoteGrantsAccess()
59 throws Exception {
60 TestingAuthenticationToken auth = makeTestToken();
61 AffirmativeBased mgr = makeDecisionManager();
62
63 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
64 config.addConfigAttribute(new SecurityConfig("ROLE_1"));
65 config.addConfigAttribute(new SecurityConfig("DENY_FOR_SURE"));
66
67 mgr.decide(auth, new Object(), config);
68 assertTrue(true);
69 }
70
71 public void testOneAffirmativeVoteTwoAbstainVotesGrantsAccess()
72 throws Exception {
73 TestingAuthenticationToken auth = makeTestToken();
74 AffirmativeBased mgr = makeDecisionManager();
75
76 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
77 config.addConfigAttribute(new SecurityConfig("ROLE_2"));
78
79 mgr.decide(auth, new Object(), config);
80 assertTrue(true);
81 }
82
83 public void testOneDenyVoteTwoAbstainVotesDeniesAccess()
84 throws Exception {
85 TestingAuthenticationToken auth = makeTestToken();
86 AffirmativeBased mgr = makeDecisionManager();
87
88 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
89 config.addConfigAttribute(new SecurityConfig("ROLE_WE_DO_NOT_HAVE"));
90
91 try {
92 mgr.decide(auth, new Object(), config);
93 fail("Should have thrown AccessDeniedException");
94 } catch (AccessDeniedException expected) {
95 assertTrue(true);
96 }
97 }
98
99 public void testThreeAbstainVotesDeniesAccessWithDefault()
100 throws Exception {
101 TestingAuthenticationToken auth = makeTestToken();
102 AffirmativeBased mgr = makeDecisionManager();
103
104 assertTrue(!mgr.isAllowIfAllAbstainDecisions());
105
106 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
107 config.addConfigAttribute(new SecurityConfig("IGNORED_BY_ALL"));
108
109 try {
110 mgr.decide(auth, new Object(), config);
111 fail("Should have thrown AccessDeniedException");
112 } catch (AccessDeniedException expected) {
113 assertTrue(true);
114 }
115 }
116
117 public void testThreeAbstainVotesGrantsAccessWithoutDefault()
118 throws Exception {
119 TestingAuthenticationToken auth = makeTestToken();
120 AffirmativeBased mgr = makeDecisionManager();
121 mgr.setAllowIfAllAbstainDecisions(true);
122 assertTrue(mgr.isAllowIfAllAbstainDecisions());
123
124 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
125 config.addConfigAttribute(new SecurityConfig("IGNORED_BY_ALL"));
126
127 mgr.decide(auth, new Object(), config);
128 assertTrue(true);
129 }
130
131 public void testTwoAffirmativeVotesTwoAbstainVotesGrantsAccess()
132 throws Exception {
133 TestingAuthenticationToken auth = makeTestToken();
134 AffirmativeBased mgr = makeDecisionManager();
135
136 ConfigAttributeDefinition config = new ConfigAttributeDefinition();
137 config.addConfigAttribute(new SecurityConfig("ROLE_1"));
138 config.addConfigAttribute(new SecurityConfig("ROLE_2"));
139
140 mgr.decide(auth, new Object(), config);
141 assertTrue(true);
142 }
143
144 private AffirmativeBased makeDecisionManager() {
145 AffirmativeBased decisionManager = new AffirmativeBased();
146 RoleVoter roleVoter = new RoleVoter();
147 DenyVoter denyForSureVoter = new DenyVoter();
148 DenyAgainVoter denyAgainForSureVoter = new DenyAgainVoter();
149 List voters = new Vector();
150 voters.add(roleVoter);
151 voters.add(denyForSureVoter);
152 voters.add(denyAgainForSureVoter);
153 decisionManager.setDecisionVoters(voters);
154
155 return decisionManager;
156 }
157
158 private TestingAuthenticationToken makeTestToken() {
159 return new TestingAuthenticationToken("somebody", "password",
160 new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_1"), new GrantedAuthorityImpl(
161 "ROLE_2")});
162 }
163 }