📄 filterstest.java
字号:
/** * Verifies that the filter chain invokes the servlet. */ public void testFilterChain() throws Exception { WebXMLString wxs = new WebXMLString(); wxs.addServlet( "Simple", "/SimpleServlet", SimpleGetServlet.class ); wxs.addFilterForServlet( "Trivial", TrivialFilter.class, "Simple" ); ServletRunner sr = new ServletRunner( wxs.asInputStream() ); ServletUnitClient wc = sr.newClient(); InvocationContext ic = wc.newInvocation( "http://localhost/SimpleServlet" ); _servletCalled = false; HttpServletResponse originalResponse = ic.getResponse(); HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper( originalResponse ); ic.getFilterChain().doFilter( ic.getRequest(), responseWrapper ); assertTrue( "Servlet was not called", _servletCalled ); assertTrue( "Filter marked as active", ic.isFilterActive() ); assertSame( "Response object after doFilter", originalResponse, ic.getResponse() ); } /** * Verifies that filters are automatically called. */ public void testFilterInvocation() throws Exception { WebXMLString wxs = new WebXMLString(); wxs.addServlet( "Simple", "/SimpleServlet", SimpleGetServlet.class ); wxs.addFilterForServlet( "Attribute", AttributeFilter.class, "Simple" ); ServletRunner sr = new ServletRunner( wxs.asInputStream() ); ServletUnitClient wc = sr.newClient(); WebResponse wr = wc.getResponse( "http://localhost/SimpleServlet" ); assertEquals( "Filtered response ", "by-filter", wr.getText().trim() ); } /** * Verifies that a simple filter is associated with a url pattern. */ public void testUrlFilterAssociation() throws Exception { WebXMLString wxs = new WebXMLString(); wxs.addServlet( "Simple", "/helpMe/SimpleServlet", SimpleGetServlet.class ); wxs.addFilterForUrl( "Trivial", TrivialFilter.class, "/helpMe/*" ); wxs.addFilterForUrl( "Other", AttributeFilter.class, "/Simple" ); WebApplication application = new WebApplication( HttpUnitUtils.newParser().parse( new InputSource( wxs.asInputStream() ) ), null ); ServletMetaData metaData = application.getServletRequest( new URL( "http://localhost/helpMe/SimpleServlet" ) ); FilterMetaData[] filters = metaData.getFilters(); assertEquals( "number of associated filters", 1, filters.length ); assertEquals( "filter class", TrivialFilter.class, filters[0].getFilter().getClass() ); } public void testFilterMapping() throws Exception { FilterUrlMap map = new FilterUrlMap(); map.put( "/foo/bar/*", FILTER1 ); map.put( "/baz/*", FILTER2 ); map.put( "/catalog", FILTER3 ); map.put( "*.bop", FILTER4 ); map.put( "/foo/bar/*", FILTER5 ); map.put( "/foo/*", FILTER6 ); checkMapping( map, "/catalog", new FilterMetaData[] { FILTER3 } ); checkMapping( map, "/catalog/racecar.bop", new FilterMetaData[] { FILTER4 } ); checkMapping( map, "/index.bop", new FilterMetaData[] { FILTER4 } ); checkMapping( map, "/foo/bar/index.html", new FilterMetaData[] { FILTER1, FILTER5, FILTER6 } ); checkMapping( map, "/foo/index.bop", new FilterMetaData[] { FILTER4, FILTER6 } ); checkMapping( map, "/baz", new FilterMetaData[] { FILTER2 } ); checkMapping( map, "/bazel", new FilterMetaData[0] ); checkMapping( map, "/baz/index.html", new FilterMetaData[] { FILTER2 } ); checkMapping( map, "/something/else", new FilterMetaData[0] ); } private void checkMapping( FilterUrlMap map, String urlString, FilterMetaData[] expectedFilters ) { assertEquals( "Filters selected for '" + urlString + "'", Arrays.asList( expectedFilters), Arrays.asList( map.getMatchingFilters( urlString ) ) ); } public void testFilterInitialization() throws Exception { WebXMLString wxs = new WebXMLString(); wxs.addServlet( "Simple", "/SimpleServlet", SimpleGetServlet.class ); Properties params = new Properties(); params.setProperty( "color", "red" ); params.setProperty( "age", "12" ); wxs.addFilterForServlet( "Config", AttributeFilter.class, "Simple", params ); ServletRunner sr = new ServletRunner( wxs.asInputStream() ); ServletUnitClient wc = sr.newClient(); InvocationContext ic = wc.newInvocation( "http://localhost/SimpleServlet" ); AttributeFilter filter = (AttributeFilter) ic.getFilter(); FilterConfig filterConfig = filter._filterConfig; assertNotNull( "Filter was not initialized", filterConfig ); assertEquals( "Filter name", "Config", filterConfig.getFilterName() ); assertNotNull( "No servlet context provided", filterConfig.getServletContext() ); assertNull( "init parameter 'gender' should be null", filterConfig.getInitParameter( "gender" ) ); assertEquals( "init parameter 'red'", "red", filterConfig.getInitParameter( "color" ) ); ArrayList names = new ArrayList(); for (Enumeration e = filterConfig.getInitParameterNames(); e.hasMoreElements(); ) { String name = (String) e.nextElement(); names.add( name ); } assertEquals( "Number of names in enumeration", 2, names.size() ); assertTrue( "'color' not found in enumeration", names.contains( "color" ) ); assertTrue( "'age' not found in enumeration", names.contains( "age" ) ); } // TODO combination of named and url filters (url filters go first) // TODO filter shutdown // TODO filters with request dispatchers // TODO filters throwing UnavailableException static class AttributeFilter implements Filter { private FilterConfig _filterConfig; public void init( FilterConfig filterConfig ) throws ServletException { _filterConfig = filterConfig; } public void destroy() {} public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain ) throws IOException, ServletException { servletRequest.setAttribute( "called", "by-filter" ); filterChain.doFilter( servletRequest, servletResponse ); } } static class TrivialFilter implements Filter { public void init( FilterConfig filterConfig ) throws ServletException {} public void destroy() {} public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain ) throws IOException, ServletException { servletRequest.setAttribute( "called", "trivially" ); filterChain.doFilter( servletRequest, servletResponse ); } } static class SimpleGetServlet extends HttpServlet { protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { resp.setContentType( "text/html" ); PrintWriter pw = resp.getWriter(); pw.print( req.getAttribute( "called" ) ); pw.close(); _servletCalled = true; } } static class FilterMetaDataImpl implements FilterMetaData { private int _index; public FilterMetaDataImpl( int index ) { _index = index; } public Filter getFilter() throws ServletException { return null; } public String toString() { return "Filter" + _index; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -