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