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