1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.util;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.MockFilterConfig;
21
22 import org.springframework.context.ApplicationContext;
23 import org.springframework.context.support.ClassPathXmlApplicationContext;
24 import org.springframework.mock.web.MockHttpServletResponse;
25 import org.springframework.mock.web.MockHttpServletRequest;
26
27 import java.io.IOException;
28
29 import javax.servlet.Filter;
30 import javax.servlet.FilterChain;
31 import javax.servlet.FilterConfig;
32 import javax.servlet.ServletException;
33 import javax.servlet.ServletRequest;
34 import javax.servlet.ServletResponse;
35
36
37 /***
38 * Tests {@link FilterToBeanProxy}.
39 *
40 * @author Ben Alex
41 * @version $Id: FilterToBeanProxyTests.java,v 1.7 2005/11/17 00:56:08 benalex Exp $
42 */
43 public class FilterToBeanProxyTests extends TestCase {
44
45
46 public FilterToBeanProxyTests() {
47 super();
48 }
49
50 public FilterToBeanProxyTests(String arg0) {
51 super(arg0);
52 }
53
54
55
56 public final void setUp() throws Exception {
57 super.setUp();
58 }
59
60 public static void main(String[] args) {
61 junit.textui.TestRunner.run(FilterToBeanProxyTests.class);
62 }
63
64 public void testDetectsClassNotInClassLoader() throws Exception {
65
66 MockFilterConfig config = new MockFilterConfig();
67 config.setInitParmeter("targetClass", "net.sf.DOES.NOT.EXIST");
68
69 FilterToBeanProxy filter = new MockFilterToBeanProxy(
70 "org/acegisecurity/util/filtertest-valid.xml");
71
72 try {
73 filter.init(config);
74 fail("Should have thrown ServletException");
75 } catch (ServletException expected) {
76 assertEquals("Class of type net.sf.DOES.NOT.EXIST not found in classloader",
77 expected.getMessage());
78 }
79 }
80
81 public void testDetectsNeitherPropertyBeingSet() throws Exception {
82
83 MockFilterConfig config = new MockFilterConfig();
84
85 FilterToBeanProxy filter = new MockFilterToBeanProxy(
86 "org/acegisecurity/util/filtertest-valid.xml");
87
88 try {
89 filter.init(config);
90 fail("Should have thrown ServletException");
91 } catch (ServletException expected) {
92 assertEquals("targetClass or targetBean must be specified",
93 expected.getMessage());
94 }
95 }
96
97 public void testDetectsTargetBeanIsNotAFilter() throws Exception {
98
99 MockFilterConfig config = new MockFilterConfig();
100 config.setInitParmeter("targetClass",
101 "org.acegisecurity.util.MockNotAFilter");
102
103 FilterToBeanProxy filter = new MockFilterToBeanProxy(
104 "org/acegisecurity/util/filtertest-valid.xml");
105
106 try {
107 filter.init(config);
108 fail("Should have thrown ServletException");
109 } catch (ServletException expected) {
110 assertEquals("Bean 'mockNotAFilter' does not implement javax.servlet.Filter",
111 expected.getMessage());
112 }
113 }
114
115 public void testDetectsTargetBeanNotInBeanContext()
116 throws Exception {
117
118 MockFilterConfig config = new MockFilterConfig();
119 config.setInitParmeter("targetBean", "WRONG_NAME");
120
121 FilterToBeanProxy filter = new MockFilterToBeanProxy(
122 "org/acegisecurity/util/filtertest-valid.xml");
123
124 try {
125 filter.init(config);
126 fail("Should have thrown ServletException");
127 } catch (ServletException expected) {
128 assertEquals("targetBean 'WRONG_NAME' not found in context",
129 expected.getMessage());
130 }
131 }
132
133 public void testDetectsTargetClassNotInBeanContext()
134 throws Exception {
135
136 MockFilterConfig config = new MockFilterConfig();
137 config.setInitParmeter("targetClass",
138 "org.acegisecurity.util.FilterToBeanProxyTests");
139
140 FilterToBeanProxy filter = new MockFilterToBeanProxy(
141 "org/acegisecurity/util/filtertest-valid.xml");
142
143 try {
144 filter.init(config);
145 fail("Should have thrown ServletException");
146 } catch (ServletException expected) {
147 assertEquals("Bean context must contain at least one bean of type org.acegisecurity.util.FilterToBeanProxyTests",
148 expected.getMessage());
149 }
150 }
151
152 public void testIgnoresEmptyTargetBean() throws Exception {
153
154 MockFilterConfig config = new MockFilterConfig();
155 config.setInitParmeter("targetClass",
156 "org.acegisecurity.util.MockFilter");
157 config.setInitParmeter("targetBean", "");
158
159
160 MockFilterChain chain = new MockFilterChain(true);
161
162 MockHttpServletResponse response = new MockHttpServletResponse();
163 MockHttpServletRequest request = new MockHttpServletRequest();
164
165 FilterToBeanProxy filter = new MockFilterToBeanProxy(
166 "org/acegisecurity/util/filtertest-valid.xml");
167
168 executeFilterInContainerSimulator(config, filter, request, response,
169 chain);
170 }
171
172 public void testNormalOperationWithLazyTrue() throws Exception {
173
174 MockFilterConfig config = new MockFilterConfig();
175 config.setInitParmeter("targetBean", "mockFilter");
176 config.setInitParmeter("init", "lazy");
177
178
179 MockFilterChain chain = new MockFilterChain(true);
180
181 MockHttpServletResponse response = new MockHttpServletResponse();
182 MockHttpServletRequest request = new MockHttpServletRequest();
183
184 FilterToBeanProxy filter = new MockFilterToBeanProxy(
185 "org/acegisecurity/util/filtertest-valid.xml");
186
187 executeFilterInContainerSimulator(config, filter, request, response,
188 chain);
189 }
190
191 public void testNormalOperationWithSpecificBeanName()
192 throws Exception {
193
194 MockFilterConfig config = new MockFilterConfig();
195 config.setInitParmeter("targetBean", "mockFilter");
196
197
198 MockFilterChain chain = new MockFilterChain(true);
199
200 MockHttpServletResponse response = new MockHttpServletResponse();
201 MockHttpServletRequest request = new MockHttpServletRequest();
202
203 FilterToBeanProxy filter = new MockFilterToBeanProxy(
204 "org/acegisecurity/util/filtertest-valid.xml");
205
206 executeFilterInContainerSimulator(config, filter, request, response,
207 chain);
208 }
209
210 public void testNormalOperationWithTargetClass() throws Exception {
211
212 MockFilterConfig config = new MockFilterConfig();
213 config.setInitParmeter("targetClass",
214 "org.acegisecurity.util.MockFilter");
215
216
217 MockFilterChain chain = new MockFilterChain(true);
218
219 MockHttpServletResponse response = new MockHttpServletResponse();
220 MockHttpServletRequest request = new MockHttpServletRequest();
221
222 FilterToBeanProxy filter = new MockFilterToBeanProxy(
223 "org/acegisecurity/util/filtertest-valid.xml");
224
225 executeFilterInContainerSimulator(config, filter, request, response,
226 chain);
227 }
228
229 public void testNullDelegateDoesNotCauseNullPointerException()
230 throws Exception {
231
232 MockFilterConfig config = new MockFilterConfig();
233 config.setInitParmeter("targetBean", "aFilterThatDoesntExist");
234 config.setInitParmeter("init", "lazy");
235
236
237 MockFilterChain chain = new MockFilterChain(true);
238
239 MockHttpServletResponse response = new MockHttpServletResponse();
240 MockHttpServletRequest request = new MockHttpServletRequest();
241
242 FilterToBeanProxy filter = new MockFilterToBeanProxy(
243 "org/acegisecurity/util/filtertest-valid.xml");
244
245
246 filter.destroy();
247 }
248
249 private void executeFilterInContainerSimulator(FilterConfig filterConfig,
250 Filter filter, ServletRequest request, ServletResponse response,
251 FilterChain filterChain) throws ServletException, IOException {
252 filter.init(filterConfig);
253 filter.doFilter(request, response, filterChain);
254 filter.destroy();
255 }
256
257
258
259 private class MockFilterToBeanProxy extends FilterToBeanProxy {
260 private String appContextLocation;
261
262 public MockFilterToBeanProxy(String appContextLocation) {
263 this.appContextLocation = appContextLocation;
264 }
265
266 private MockFilterToBeanProxy() {
267 super();
268 }
269
270 protected ApplicationContext getContext(FilterConfig filterConfig) {
271 return new ClassPathXmlApplicationContext(appContextLocation);
272 }
273 }
274 }