From 7939f8aa3f86fd82cb013611e682a2d037ccf43b Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 29 Nov 2010 16:58:31 +0000 Subject: [PATCH] Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=50352 git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1040190 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/core/TestAsyncContextImpl.java | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/test/org/apache/catalina/core/TestAsyncContextImpl.java b/test/org/apache/catalina/core/TestAsyncContextImpl.java index dd7b02fbf..2dad6f900 100644 --- a/test/org/apache/catalina/core/TestAsyncContextImpl.java +++ b/test/org/apache/catalina/core/TestAsyncContextImpl.java @@ -749,4 +749,60 @@ public class TestAsyncContextImpl extends TomcatBaseTest { throw new ServletException("Opps."); } } + + public void testBug50352() throws Exception { + // Setup Tomcat instance + Tomcat tomcat = getTomcatInstance(); + + // Must have a real docBase - just use temp + File docBase = new File(System.getProperty("java.io.tmpdir")); + + Context ctx = tomcat.addContext("", docBase.getAbsolutePath()); + + AsyncStartRunnable servlet = new AsyncStartRunnable(); + Wrapper wrapper = Tomcat.addServlet(ctx, "servlet", servlet); + wrapper.setAsyncSupported(true); + ctx.addServletMapping("/", "servlet"); + + ErrorServlet error = new ErrorServlet(); + Tomcat.addServlet(ctx, "error", error); + ctx.addServletMapping("/stage2", "error"); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + "/"); + + assertEquals("Runnable-onComplete-", res.toString()); + } + + private static final class AsyncStartRunnable extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException { + + final AsyncContext asyncContext = + request.startAsync(request, response); + + asyncContext.addListener(new TrackingListener(false, false, null)); + + asyncContext.start(new Runnable() { + + @Override + public void run() { + try { + Thread.sleep(3 * 1000); + asyncContext.getResponse().getWriter().write( + "Runnable-"); + asyncContext.complete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + } } -- 2.11.0