1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.intercept.web;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.ConfigAttributeDefinition;
21 import org.acegisecurity.MockFilterChain;
22
23
24 import org.acegisecurity.SecurityConfig;
25
26 import java.util.Iterator;
27
28 import org.springframework.mock.web.MockHttpServletRequest;
29 import org.springframework.mock.web.MockHttpServletResponse;
30
31
32 /***
33 * Tests {@link FilterInvocationDefinitionSourceEditor} and its associated
34 * {@link PathBasedFilterInvocationDefinitionMap}.
35 *
36 * @author Ben Alex
37 * @version $Id: FilterInvocationDefinitionSourceEditorWithPathsTests.java,v 1.3 2005/11/17 00:55:50 benalex Exp $
38 */
39 public class FilterInvocationDefinitionSourceEditorWithPathsTests
40 extends TestCase {
41
42
43 public FilterInvocationDefinitionSourceEditorWithPathsTests() {
44 super();
45 }
46
47 public FilterInvocationDefinitionSourceEditorWithPathsTests(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(FilterInvocationDefinitionSourceEditorWithPathsTests.class);
59 }
60
61 public void testAntPathDirectiveIsDetected() {
62 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
63 editor.setAsText(
64 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE\r\n/secure/*=ROLE_SUPERVISOR,ROLE_TELLER");
65
66 FilterInvocationDefinitionMap map = (FilterInvocationDefinitionMap) editor
67 .getValue();
68 assertTrue(map instanceof PathBasedFilterInvocationDefinitionMap);
69 }
70
71 public void testConvertUrlToLowercaseDefaultSettingUnchangedByEditor() {
72 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
73 editor.setAsText(
74 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE\r\n/secure/*=ROLE_SUPERVISOR,ROLE_TELLER");
75
76 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
77 .getValue();
78 assertFalse(map.isConvertUrlToLowercaseBeforeComparison());
79 }
80
81 public void testConvertUrlToLowercaseSettingApplied() {
82 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
83 editor.setAsText(
84 "CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON\r\nPATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE\r\n/secure/*=ROLE_SUPERVISOR,ROLE_TELLER");
85
86 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
87 .getValue();
88 assertTrue(map.isConvertUrlToLowercaseBeforeComparison());
89 }
90
91 public void testIterator() {
92 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
93 editor.setAsText(
94 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE\r\n/secure/*=ROLE_SUPERVISOR,ROLE_TELLER");
95
96 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
97 .getValue();
98 Iterator iter = map.getConfigAttributeDefinitions();
99 int counter = 0;
100
101 while (iter.hasNext()) {
102 iter.next();
103 counter++;
104 }
105
106 assertEquals(2, counter);
107 }
108
109 public void testMapReturnsNullWhenNoMatchFound() throws Exception {
110 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
111 editor.setAsText(
112 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE");
113
114 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
115 .getValue();
116
117 MockHttpServletRequest httpRequest = new MockHttpServletRequest(null,
118 null);
119 httpRequest.setServletPath("/totally/different/path/index.html");
120
121 ConfigAttributeDefinition returned = map.getAttributes(new FilterInvocation(
122 httpRequest, new MockHttpServletResponse(),
123 new MockFilterChain()));
124
125 assertEquals(null, returned);
126 }
127
128 public void testMultiUrlParsing() {
129 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
130 editor.setAsText(
131 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE\r\n/secure/*=ROLE_SUPERVISOR,ROLE_TELLER");
132
133 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
134 .getValue();
135 assertEquals(2, map.getMapSize());
136 }
137
138 public void testNoArgsConstructor() {
139 try {
140 new PathBasedFilterInvocationDefinitionMap().new EntryHolder();
141 fail("Should have thrown IllegalArgumentException");
142 } catch (IllegalArgumentException expected) {
143 assertTrue(true);
144 }
145 }
146
147 public void testOrderOfEntriesIsPreservedOrderA() {
148 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
149 editor.setAsText(
150 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/**=ROLE_WE_DONT_HAVE,ANOTHER_ROLE\r\n/secure/**=ROLE_SUPERVISOR,ROLE_TELLER");
151
152 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
153 .getValue();
154
155
156 MockHttpServletRequest httpRequest = new MockHttpServletRequest(null,
157 null);
158 httpRequest.setServletPath("/secure/super/very_secret.html");
159
160 ConfigAttributeDefinition returned = map.getAttributes(new FilterInvocation(
161 httpRequest, new MockHttpServletResponse(),
162 new MockFilterChain()));
163
164 ConfigAttributeDefinition expected = new ConfigAttributeDefinition();
165 expected.addConfigAttribute(new SecurityConfig("ROLE_WE_DONT_HAVE"));
166 expected.addConfigAttribute(new SecurityConfig("ANOTHER_ROLE"));
167
168 assertEquals(expected, returned);
169 }
170
171 public void testOrderOfEntriesIsPreservedOrderB() {
172 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
173 editor.setAsText(
174 "PATTERN_TYPE_APACHE_ANT\r\n/secure/**=ROLE_SUPERVISOR,ROLE_TELLER\r\n/secure/super/**=ROLE_WE_DONT_HAVE");
175
176 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
177 .getValue();
178
179 MockHttpServletRequest httpRequest = new MockHttpServletRequest(null,
180 null);
181 httpRequest.setServletPath("/secure/super/very_secret.html");
182
183 ConfigAttributeDefinition returned = map.getAttributes(new FilterInvocation(
184 httpRequest, new MockHttpServletResponse(),
185 new MockFilterChain()));
186
187 ConfigAttributeDefinition expected = new ConfigAttributeDefinition();
188 expected.addConfigAttribute(new SecurityConfig("ROLE_SUPERVISOR"));
189 expected.addConfigAttribute(new SecurityConfig("ROLE_TELLER"));
190
191 assertEquals(expected, returned);
192 }
193
194 public void testSingleUrlParsing() throws Exception {
195 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
196 editor.setAsText(
197 "PATTERN_TYPE_APACHE_ANT\r\n/secure/super/*=ROLE_WE_DONT_HAVE,ANOTHER_ROLE");
198
199 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
200 .getValue();
201
202 MockHttpServletRequest httpRequest = new MockHttpServletRequest(null,
203 null);
204 httpRequest.setServletPath("/secure/super/very_secret.html");
205
206 ConfigAttributeDefinition returned = map.getAttributes(new FilterInvocation(
207 httpRequest, new MockHttpServletResponse(),
208 new MockFilterChain()));
209
210 ConfigAttributeDefinition expected = new ConfigAttributeDefinition();
211 expected.addConfigAttribute(new SecurityConfig("ROLE_WE_DONT_HAVE"));
212 expected.addConfigAttribute(new SecurityConfig("ANOTHER_ROLE"));
213
214 assertEquals(expected, returned);
215 }
216
217 public void testWhitespaceAndCommentsAndLinesWithoutEqualsSignsAreIgnored() {
218 FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor();
219 editor.setAsText(
220 " PATTERN_TYPE_APACHE_ANT\r\n /secure/super/*=ROLE_WE_DONT_HAVE\r\n /secure/*=ROLE_SUPERVISOR,ROLE_TELLER \r\n \r\n \r\n // comment line \r\n \r\n");
221
222 PathBasedFilterInvocationDefinitionMap map = (PathBasedFilterInvocationDefinitionMap) editor
223 .getValue();
224 assertEquals(2, map.getMapSize());
225 }
226 }