• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.google.inject.servlet;
2 
3 import static org.easymock.EasyMock.createMock;
4 import static org.easymock.EasyMock.expect;
5 import static org.easymock.EasyMock.expectLastCall;
6 import static org.easymock.EasyMock.isA;
7 import static org.easymock.EasyMock.isNull;
8 import static org.easymock.EasyMock.replay;
9 import static org.easymock.EasyMock.verify;
10 
11 import com.google.inject.Guice;
12 import com.google.inject.Key;
13 import com.google.inject.Singleton;
14 import java.io.IOException;
15 import javax.servlet.Filter;
16 import javax.servlet.FilterChain;
17 import javax.servlet.FilterConfig;
18 import javax.servlet.ServletContext;
19 import javax.servlet.ServletException;
20 import javax.servlet.ServletRequest;
21 import javax.servlet.ServletResponse;
22 import javax.servlet.http.HttpServletRequest;
23 import junit.framework.TestCase;
24 
25 /**
26  * This is a basic whitebox test that verifies the glue between GuiceFilter and
27  * ManagedFilterPipeline is working.
28  *
29  * @author dhanji@gmail.com (Dhanji R. Prasanna)
30  */
31 public class FilterPipelineTest extends TestCase {
32 
33   @Override
setUp()34   public final void setUp() {
35     GuiceFilter.reset();
36 
37     Guice.createInjector(
38         new ServletModule() {
39 
40           @Override
41           protected void configureServlets() {
42             filter("/*").through(TestFilter.class);
43             filter("*.html").through(TestFilter.class);
44             filter("/*").through(Key.get(TestFilter.class));
45             filter("*.jsp").through(Key.get(TestFilter.class));
46 
47             // These filters should never fire
48             filter("/index/*").through(Key.get(NeverFilter.class));
49             filter("/public/login/*").through(Key.get(NeverFilter.class));
50           }
51         });
52   }
53 
54   @Override
tearDown()55   public final void tearDown() {
56     GuiceFilter.reset();
57   }
58 
testDispatchThruGuiceFilter()59   public final void testDispatchThruGuiceFilter() throws ServletException, IOException {
60 
61     //create mocks
62     FilterConfig filterConfig = createMock(FilterConfig.class);
63     ServletContext servletContext = createMock(ServletContext.class);
64     HttpServletRequest request = createMock(HttpServletRequest.class);
65     FilterChain proceedingFilterChain = createMock(FilterChain.class);
66 
67     //begin mock script ***
68 
69     expect(filterConfig.getServletContext()).andReturn(servletContext).once();
70 
71     expect(request.getRequestURI()).andReturn("/public/login.jsp").anyTimes();
72     expect(request.getContextPath()).andReturn("").anyTimes();
73 
74     //at the end, proceed down webapp's normal filter chain
75     proceedingFilterChain.doFilter(isA(HttpServletRequest.class), (ServletResponse) isNull());
76     expectLastCall().once();
77 
78     //run mock script ***
79     replay(filterConfig, servletContext, request, proceedingFilterChain);
80 
81     final GuiceFilter webFilter = new GuiceFilter();
82 
83     webFilter.init(filterConfig);
84     webFilter.doFilter(request, null, proceedingFilterChain);
85     webFilter.destroy();
86 
87     //assert expectations
88     verify(filterConfig, servletContext, request, proceedingFilterChain);
89   }
90 
91   @Singleton
92   public static class TestFilter implements Filter {
93     @Override
init(FilterConfig filterConfig)94     public void init(FilterConfig filterConfig) {}
95 
96     @Override
doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)97     public void doFilter(
98         ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
99         throws IOException, ServletException {
100       filterChain.doFilter(servletRequest, servletResponse);
101     }
102 
103     @Override
destroy()104     public void destroy() {}
105   }
106 
107   @Singleton
108   public static class NeverFilter implements Filter {
109     @Override
init(FilterConfig filterConfig)110     public void init(FilterConfig filterConfig) {}
111 
112     @Override
doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)113     public void doFilter(
114         ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
115       fail("This filter should never have fired");
116     }
117 
118     @Override
destroy()119     public void destroy() {}
120   }
121 }
122