View | Details | Raw Unified | Return to bug 59219
Collapse All | Expand All

(-)test/org/apache/catalina/core/TestAsyncContextImpl.java (-34 / +111 lines)
Lines 16-59 Link Here
16
 */
16
 */
17
package org.apache.catalina.core;
17
package org.apache.catalina.core;
18
18
19
import java.io.IOException;
20
import java.io.PrintWriter;
21
import java.util.HashMap;
22
import java.util.LinkedHashMap;
23
import java.util.List;
24
import java.util.Map;
25
import java.util.concurrent.ExecutorService;
26
import java.util.concurrent.Executors;
27
28
import javax.servlet.AsyncContext;
29
import javax.servlet.AsyncEvent;
30
import javax.servlet.AsyncListener;
31
import javax.servlet.DispatcherType;
32
import javax.servlet.GenericServlet;
33
import javax.servlet.RequestDispatcher;
34
import javax.servlet.Servlet;
35
import javax.servlet.ServletException;
36
import javax.servlet.ServletRequest;
37
import javax.servlet.ServletRequestEvent;
38
import javax.servlet.ServletRequestListener;
39
import javax.servlet.ServletRequestWrapper;
40
import javax.servlet.ServletResponse;
41
import javax.servlet.ServletResponseWrapper;
42
import javax.servlet.http.HttpServlet;
43
import javax.servlet.http.HttpServletRequest;
44
import javax.servlet.http.HttpServletResponse;
45
46
import static org.junit.Assert.assertEquals;
47
import static org.junit.Assert.assertNotNull;
48
import static org.junit.Assert.assertTrue;
49
50
import org.junit.Assert;
51
import org.junit.Test;
52
53
import org.apache.catalina.Context;
19
import org.apache.catalina.Context;
54
import org.apache.catalina.Wrapper;
20
import org.apache.catalina.Wrapper;
55
import org.apache.catalina.connector.Request;
21
import org.apache.catalina.connector.Request;
56
import org.apache.catalina.connector.Response;
22
import org.apache.catalina.connector.Response;
23
import org.apache.catalina.startup.TesterServlet;
57
import org.apache.catalina.startup.Tomcat;
24
import org.apache.catalina.startup.Tomcat;
58
import org.apache.catalina.startup.TomcatBaseTest;
25
import org.apache.catalina.startup.TomcatBaseTest;
59
import org.apache.catalina.valves.TesterAccessLogValve;
26
import org.apache.catalina.valves.TesterAccessLogValve;
Lines 61-67 Link Here
61
import org.apache.tomcat.util.buf.ByteChunk;
28
import org.apache.tomcat.util.buf.ByteChunk;
62
import org.apache.tomcat.util.descriptor.web.ErrorPage;
29
import org.apache.tomcat.util.descriptor.web.ErrorPage;
63
import org.easymock.EasyMock;
30
import org.easymock.EasyMock;
31
import org.junit.Assert;
32
import org.junit.Test;
64
33
34
import javax.servlet.*;
35
import javax.servlet.http.HttpServlet;
36
import javax.servlet.http.HttpServletRequest;
37
import javax.servlet.http.HttpServletResponse;
38
import java.io.IOException;
39
import java.io.PrintWriter;
40
import java.util.HashMap;
41
import java.util.LinkedHashMap;
42
import java.util.List;
43
import java.util.Map;
44
import java.util.concurrent.ExecutorService;
45
import java.util.concurrent.Executors;
46
47
import static org.junit.Assert.*;
48
65
public class TestAsyncContextImpl extends TomcatBaseTest {
49
public class TestAsyncContextImpl extends TomcatBaseTest {
66
50
67
    // Time for a request to process (need to allow for threads to start etc.)
51
    // Time for a request to process (need to allow for threads to start etc.)
Lines 1822-1827 Link Here
1822
    }
1806
    }
1823
1807
1824
    @Test
1808
    @Test
1809
    public void testBug59219() throws Exception{
1810
        resetTracker();
1811
        Tomcat tomcat = getTomcatInstance();
1812
1813
        Context ctx = tomcat.addContext("", null);
1814
//        tomcat.addServlet("", "async", new Bug59219Servlet())
1815
        tomcat.addServlet("", "async", new Bug59219Servlet())
1816
                .setAsyncSupported(true);
1817
        ctx.addServletMapping("/async", "async");
1818
1819
        tomcat.start();
1820
1821
        //Point 2.
1822
        ByteChunk body = getUrl("http://localhost:" + getPort() + "/async");
1823
        String expected = "doGet-onError";
1824
1825
        //Just let's give it 5 seconds :)
1826
        int count = 0;
1827
        while(!expected.equals(body.toString()) || count < 100) {
1828
            Thread.sleep(50);
1829
            count++;
1830
        }
1831
1832
        Assert.assertEquals(expected, body.toString());
1833
1834
        //Point 3.
1835
        body = getUrl("http://localhost:" + getPort() + "/async?loops=3");
1836
        expected = "doGet-doGet-doGet-onError";
1837
1838
        count = 0;
1839
        while(!expected.equals(body.toString()) || count < 100) {
1840
            Thread.sleep(50);
1841
            count++;
1842
        }
1843
1844
        Assert.assertEquals(expected, body.toString());
1845
    }
1846
1847
    private static class Bug59219Servlet extends HttpServlet {
1848
1849
        @Override
1850
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
1851
                throws ServletException, IOException {
1852
1853
            resp.setContentType("text/html");
1854
            AsyncContext ctx = req.startAsync();
1855
            ctx.addListener(new Bug59219Listener());
1856
            resp.getWriter().write("doGet-");
1857
1858
            String loop = req.getParameter("loop");
1859
            Integer iloop = (Integer) req.getAttribute("iloop");
1860
1861
            if (iloop == null) {
1862
                iloop = 0;
1863
                if (loop != null)
1864
                    iloop = Integer.parseInt(loop);
1865
            }
1866
1867
            if (iloop > 0) {
1868
                iloop--;
1869
                req.setAttribute("iloop", iloop);
1870
                ctx.dispatch();
1871
            } else
1872
                throw new ServletException("container be nice and process onError.");
1873
        }
1874
1875
    }
1876
1877
    private static class Bug59219Listener implements AsyncListener {
1878
1879
        @Override
1880
        public void onComplete(AsyncEvent ae) throws IOException {
1881
            // Nothing.
1882
        }
1883
1884
        @Override
1885
        public void onTimeout(AsyncEvent ae) throws IOException {
1886
            // Nothing.
1887
        }
1888
1889
        @Override
1890
        public void onError(AsyncEvent ae) throws IOException {
1891
            ae.getAsyncContext().getResponse().getWriter()
1892
                    .write("onError");
1893
        }
1894
1895
        @Override
1896
        public void onStartAsync(AsyncEvent ae) throws IOException {
1897
            // Nothing.
1898
        }
1899
    }
1900
1901
    @Test
1825
    public void testForbiddenDispatching() throws Exception {
1902
    public void testForbiddenDispatching() throws Exception {
1826
        resetTracker();
1903
        resetTracker();
1827
        // Setup Tomcat instance
1904
        // Setup Tomcat instance

Return to bug 59219