From 87a7e706f90645917d42a1c9cf07ef8ac0fe4293 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 10 Feb 2011 19:42:34 +0000 Subject: [PATCH] Add a test case (already passes) for bug50753 git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1069540 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/core/TestAsyncContextImpl.java | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/test/org/apache/catalina/core/TestAsyncContextImpl.java b/test/org/apache/catalina/core/TestAsyncContextImpl.java index 2dad6f900..fcd0d0287 100644 --- a/test/org/apache/catalina/core/TestAsyncContextImpl.java +++ b/test/org/apache/catalina/core/TestAsyncContextImpl.java @@ -19,6 +19,9 @@ package org.apache.catalina.core; import java.io.File; import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import javax.servlet.AsyncContext; import javax.servlet.AsyncEvent; @@ -805,4 +808,60 @@ public class TestAsyncContextImpl extends TomcatBaseTest { }); } } + + public void testBug50753() throws Exception { + // Setup Tomcat instance + Tomcat tomcat = getTomcatInstance(); + + // Must have a real docBase - just use temp + Context ctx = + tomcat.addContext("", System.getProperty("java.io.tmpdir")); + + Bug50753Servlet servlet = new Bug50753Servlet(); + + Wrapper wrapper = Tomcat.addServlet(ctx, "servlet", servlet); + wrapper.setAsyncSupported(true); + ctx.addServletMapping("/", "servlet"); + + tomcat.start(); + + // Call the servlet once + Map> headers = + new LinkedHashMap>(); + ByteChunk bc = new ByteChunk(); + int rc = getUrl("http://localhost:" + getPort() + "/", bc, headers); + assertEquals(200, rc); + assertEquals("OK", bc.toString()); + List testHeader = headers.get("A"); + assertNotNull(testHeader); + assertEquals(1, testHeader.size()); + assertEquals("xyz",testHeader.get(0)); + } + + private static class Bug50753Servlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest req, + final HttpServletResponse resp) + throws ServletException, IOException { + final AsyncContext ctx = req.startAsync(); + ctx.start(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(5000); + resp.setHeader("A", "xyz"); + resp.setContentType("text/plain"); + resp.setContentLength("OK".getBytes().length); + resp.getWriter().print("OK"); + ctx.complete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + } } -- 2.11.0