X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=test%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Ftest%2FHttpTestCase.java;fp=test%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Ftest%2FHttpTestCase.java;h=76c46468f9f25c3f474610073580b78f19660db8;hp=0000000000000000000000000000000000000000;hb=d0f92829349bec782236b5ad0ef089b961cd4901;hpb=74241e3e3fcf85d3ac34d56d4551262c960e6c87 diff --git a/test/src/main/java/de/halbekunst/juplo/test/HttpTestCase.java b/test/src/main/java/de/halbekunst/juplo/test/HttpTestCase.java new file mode 100644 index 00000000..76c46468 --- /dev/null +++ b/test/src/main/java/de/halbekunst/juplo/test/HttpTestCase.java @@ -0,0 +1,84 @@ +package de.halbekunst.juplo.test; + +import com.meterware.httpunit.WebResponse; +import com.meterware.servletunit.InvocationContext; +import com.meterware.servletunit.ServletRunner; +import com.meterware.servletunit.ServletUnitClient; +import java.io.File; +import java.util.Enumeration; +import javax.servlet.http.HttpServletRequest; +import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author kai + */ +public abstract class HttpTestCase { + + private final static Logger log = LoggerFactory.getLogger(HttpTestCase.class); + + private ServletRunner sr; + private File config; + public ServletUnitClient client; + + + public HttpTestCase(String config) { + this(new File(config)); + } + + public HttpTestCase(File config) { + if (!config.exists()) + throw new RuntimeException("web.xml is missing: " + config + " does not exist."); + this.config = config; + } + + + @Before + public void init() throws Exception { + sr = new ServletRunner(config, ""); // Dies ist der einzige Konstruktor, der die Context-Root der Webapp im Testfall korrekt initialisiert :/ + client = sr.newClient(); + } + + public WebResponse executeRequest(String uri) throws Exception { + log.debug("---------- GET: {}", uri); + InvocationContext invocation = client.newInvocation(uri); + HttpServletRequest request = invocation.getRequest(); + log.debug("Request - {}: {}", request.getMethod(), request.getProtocol()); + Enumeration headers = request.getHeaderNames(); + while (headers.hasMoreElements()) { + String header = headers.nextElement(); + Enumeration values = request.getHeaders(header); + while (values.hasMoreElements()) + log.debug("Request - {}: {}", header, values.nextElement()); + } + + log.debug("Invocing service method."); + + /** + * We cannot call invocation.service(), because we have to wrap the + * response. Therefore this was coppied from InvocationContextImpl. + */ + LoggingHttpServletResponseWrapper wrappedResponse = + new LoggingHttpServletResponseWrapper(uri, invocation.getResponse()); + if (invocation.isFilterActive()) { + invocation.getFilter().doFilter(invocation.getRequest(), wrappedResponse, invocation.getFilterChain()); + } + else { + invocation.getServlet().service(invocation.getRequest(), wrappedResponse); + } + long count = wrappedResponse.close(); + + WebResponse response = invocation.getServletResponse(); + log.debug("Response - {}: {}", response.getResponseCode(), response.getResponseMessage()); + log.debug("Response - {}, {} bytes", response.getContentType(), count); + for (String header : response.getHeaderFieldNames()) { + for (String value : response.getHeaderFields(header)) { + log.debug("Response - {}: {}", header, value); + } + } + return response; + } +} +