1 package com.atlassian.core.filters;
2
3 import com.mockobjects.constraint.IsEqual;
4 import com.mockobjects.constraint.IsInstanceOf;
5 import com.mockobjects.dynamic.FullConstraintMatcher;
6 import com.mockobjects.dynamic.Mock;
7 import com.mockobjects.servlet.MockHttpServletResponse;
8 import junit.framework.TestCase;
9
10 import javax.servlet.FilterChain;
11 import javax.servlet.ServletRequest;
12 import javax.servlet.http.HttpServletRequest;
13
14
15
16
17 public class TestHeaderSanitisingFilter extends TestCase
18 {
19 public void testAlreadyFilteredNonHttpServletRequest() throws Exception
20 {
21 HeaderSanitisingFilter filter = new HeaderSanitisingFilter();
22
23 Mock mockServletRequest = new Mock(ServletRequest.class);
24 mockServletRequest.expectAndReturn("getAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED)), Boolean.TRUE);
25
26 final ServletRequest request = (ServletRequest) mockServletRequest.proxy();
27 final MockHttpServletResponse response = new MockHttpServletResponse();
28
29 Mock mockFilterChain = new Mock(FilterChain.class);
30 mockFilterChain.expect("doFilter", new FullConstraintMatcher(new IsEqual(request), new IsEqual(response)));
31
32 final FilterChain filterChain = (FilterChain) mockFilterChain.proxy();
33 filter.doFilter(request, response, filterChain);
34
35 mockFilterChain.verify();
36 }
37
38 public void testAlreadyFilteredHttpServletRequest() throws Exception
39 {
40 HeaderSanitisingFilter filter = new HeaderSanitisingFilter();
41
42 Mock mockServletRequest = new Mock(HttpServletRequest.class);
43 mockServletRequest.expectAndReturn("getAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED)), Boolean.TRUE);
44
45 final ServletRequest request = (ServletRequest) mockServletRequest.proxy();
46 final MockHttpServletResponse response = new MockHttpServletResponse();
47
48 Mock mockFilterChain = new Mock(FilterChain.class);
49 mockFilterChain.expect("doFilter", new FullConstraintMatcher(new IsEqual(request), new IsEqual(response)));
50
51 final FilterChain filterChain = (FilterChain) mockFilterChain.proxy();
52 filter.doFilter(request, response, filterChain);
53
54 mockFilterChain.verify();
55 }
56
57 public void testNotAlreadyFilteredHttpServletRequest() throws Exception
58 {
59 HeaderSanitisingFilter filter = new HeaderSanitisingFilter();
60
61 Mock mockServletRequest = new Mock(HttpServletRequest.class);
62 mockServletRequest.expectAndReturn("getAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED)), null);
63 mockServletRequest.expect("setAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED), new IsEqual(Boolean.TRUE)));
64
65 final ServletRequest request = (ServletRequest) mockServletRequest.proxy();
66 final MockHttpServletResponse response = new MockHttpServletResponse();
67
68 Mock mockFilterChain = new Mock(FilterChain.class);
69 mockFilterChain.expect("doFilter", new FullConstraintMatcher(new IsEqual(request), new IsInstanceOf(HeaderSanitisingResponseWrapper.class)));
70
71 final FilterChain filterChain = (FilterChain) mockFilterChain.proxy();
72 filter.doFilter(request, response, filterChain);
73
74 mockFilterChain.verify();
75 }
76
77 public void testNotAlreadyFilteredNonHttpServletRequest() throws Exception
78 {
79 HeaderSanitisingFilter filter = new HeaderSanitisingFilter();
80
81 Mock mockServletRequest = new Mock(ServletRequest.class);
82 mockServletRequest.expectAndReturn("getAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED)), null);
83 mockServletRequest.expect("setAttribute", new FullConstraintMatcher(new IsEqual(HeaderSanitisingFilter.ALREADY_FILTERED), new IsEqual(Boolean.TRUE)));
84
85 final ServletRequest request = (ServletRequest) mockServletRequest.proxy();
86 final MockHttpServletResponse response = new MockHttpServletResponse();
87
88 Mock mockFilterChain = new Mock(FilterChain.class);
89 mockFilterChain.expect("doFilter", new FullConstraintMatcher(new IsEqual(request), new IsEqual(response)));
90
91 final FilterChain filterChain = (FilterChain) mockFilterChain.proxy();
92 filter.doFilter(request, response, filterChain);
93
94 mockFilterChain.verify();
95 }
96 }