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.eclipse.jetty.servlet.DefaultServlet;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
19 public abstract class HttpTestCase {
21 private final static Logger log = LoggerFactory.getLogger(HttpTestCase.class);
23 private ServletRunner sr;
25 public ServletUnitClient client;
28 public HttpTestCase(String config) {
29 this(new File(config));
32 public HttpTestCase(File config) {
34 throw new RuntimeException("web.xml is missing: " + config + " does not exist.");
40 public void init() throws Exception {
41 sr = new ServletRunner(config, ""); // Dies ist der einzige Konstruktor, der die Context-Root der Webapp im Testfall korrekt initialisiert :/
42 sr.registerServlet("default", DefaultServlet.class.getName());
43 client = sr.newClient();
46 public WebResponse executeRequest(String uri) throws Exception {
47 log.debug("---------- GET: {}", uri);
48 InvocationContext invocation = client.newInvocation(uri);
49 HttpServletRequest request = invocation.getRequest();
50 log.debug("Request - {}: {}", request.getMethod(), request.getProtocol());
51 Enumeration<String> headers = request.getHeaderNames();
52 while (headers.hasMoreElements()) {
53 String header = headers.nextElement();
54 Enumeration<String> values = request.getHeaders(header);
55 while (values.hasMoreElements())
56 log.debug("Request - {}: {}", header, values.nextElement());
59 log.debug("Invocing service method.");
62 * We cannot call invocation.service(), because we have to wrap the
63 * response. Therefore this was coppied from InvocationContextImpl.
65 LoggingHttpServletResponseWrapper wrappedResponse =
66 new LoggingHttpServletResponseWrapper(uri, invocation.getResponse());
67 if (invocation.isFilterActive()) {
68 invocation.getFilter().doFilter(invocation.getRequest(), wrappedResponse, invocation.getFilterChain());
71 invocation.getServlet().service(invocation.getRequest(), wrappedResponse);
73 long count = wrappedResponse.close();
75 WebResponse response = invocation.getServletResponse();
76 log.debug("Response - {}: {}", response.getResponseCode(), response.getResponseMessage());
77 log.debug("Response - {}, {} bytes", response.getContentType(), count);
78 for (String header : response.getHeaderFieldNames()) {
79 for (String value : response.getHeaderFields(header)) {
80 log.debug("Response - {}: {}", header, value);