/* Copyright (c) 2001 - 2011 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.geoserver.monitor; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import junit.framework.TestCase; import com.mockrunner.mock.web.MockFilterChain; import com.mockrunner.mock.web.MockHttpServletRequest; import com.mockrunner.mock.web.MockHttpServletResponse; public class MonitorFilterTest extends TestCase { public void testSimple() throws Exception { DummyMonitorDAO dao = new DummyMonitorDAO(); MonitorFilter filter = new MonitorFilter(new Monitor(dao), new MonitorRequestFilter()); MockFilterChain chain = new MockFilterChain(); HttpServletRequest req = request("GET", "/foo/bar", "12.34.56.78", null); filter.doFilter(req, response(), chain); RequestData data = dao.getLast(); assertEquals("GET", data.getHttpMethod()); assertEquals("/foo/bar", data.getPath()); assertEquals("12.34.56.78", data.getRemoteAddr()); chain.setServlet(new HttpServlet() { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { req.getInputStream().read(new byte[10]); res.getOutputStream().write("hello".getBytes()); } }); req = request("POST", "/bar/foo", "78.56.34.12", "baz"); filter.doFilter(req, response(), chain); data = dao.getLast(); assertEquals("POST", data.getHttpMethod()); assertEquals("/bar/foo", data.getPath()); assertEquals("78.56.34.12", data.getRemoteAddr()); assertEquals(new String(data.getBody()), "baz"); assertEquals(5, data.getResponseLength()); } MockHttpServletRequest request(String method, String path, String remoteAddr, String body ) { MockHttpServletRequest req = new MockHttpServletRequest(); req.setMethod(method); req.setServerName("localhost"); req.setServletPath(path.substring(0, path.indexOf('/', 1))); req.setPathInfo(path.substring(path.indexOf('/', 1))); req.setRemoteAddr(remoteAddr); req.setBodyContent(body); return req; } MockHttpServletResponse response() { MockHttpServletResponse response = new MockHttpServletResponse(); return response; } }