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   * @since v4.2
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  }