1 package de.halbekunst.juplo.test;
3 import com.meterware.httpunit.WebResponse;
4 import com.meterware.servletunit.InvocationContext;
5 import com.meterware.servletunit.ServletRunner;
6 import com.meterware.servletunit.ServletUnitClient;
8 import java.util.Enumeration;
9 import javax.servlet.http.HttpServletRequest;
10 import org.junit.Before;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
18 public abstract class HttpTestCase {
20 private final static Logger log = LoggerFactory.getLogger(HttpTestCase.class);
22 private ServletRunner sr;
24 public ServletUnitClient client;
27 public HttpTestCase(String config) {
28 this(new File(config));
31 public HttpTestCase(File config) {
33 throw new RuntimeException("web.xml is missing: " + config + " does not exist.");
39 public void init() throws Exception {
40 sr = new ServletRunner(config, ""); // Dies ist der einzige Konstruktor, der die Context-Root der Webapp im Testfall korrekt initialisiert :/
41 client = sr.newClient();
44 public WebResponse executeRequest(String uri) throws Exception {
45 log.debug("---------- GET: {}", uri);
46 InvocationContext invocation = client.newInvocation(uri);
47 HttpServletRequest request = invocation.getRequest();
48 log.debug("Request - {}: {}", request.getMethod(), request.getProtocol());
49 Enumeration<String> headers = request.getHeaderNames();
50 while (headers.hasMoreElements()) {
51 String header = headers.nextElement();
52 Enumeration<String> values = request.getHeaders(header);
53 while (values.hasMoreElements())
54 log.debug("Request - {}: {}", header, values.nextElement());
57 log.debug("Invocing service method.");
60 * We cannot call invocation.service(), because we have to wrap the
61 * response. Therefore this was coppied from InvocationContextImpl.
63 LoggingHttpServletResponseWrapper wrappedResponse =
64 new LoggingHttpServletResponseWrapper(uri, invocation.getResponse());
65 if (invocation.isFilterActive()) {
66 invocation.getFilter().doFilter(invocation.getRequest(), wrappedResponse, invocation.getFilterChain());
69 invocation.getServlet().service(invocation.getRequest(), wrappedResponse);
71 long count = wrappedResponse.close();
73 WebResponse response = invocation.getServletResponse();
74 log.debug("Response - {}: {}", response.getResponseCode(), response.getResponseMessage());
75 log.debug("Response - {}, {} bytes", response.getContentType(), count);
76 for (String header : response.getHeaderFieldNames()) {
77 for (String value : response.getHeaderFields(header)) {
78 log.debug("Response - {}: {}", header, value);