Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java')
-rw-r--r--jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java419
1 files changed, 268 insertions, 151 deletions
diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java
index 37130be6a4..26f694360c 100644
--- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java
+++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncServletTest.java
@@ -18,8 +18,6 @@
package org.eclipse.jetty.servlet;
-import static org.junit.Assert.assertEquals;
-
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
@@ -43,6 +41,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.QuietServletException;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.Response;
@@ -60,6 +59,10 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import static org.hamcrest.Matchers.startsWith;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
@RunWith(AdvancedRunner.class)
public class AsyncServletTest
@@ -79,7 +82,7 @@ public class AsyncServletTest
{
_connector = new ServerConnector(_server);
_server.setConnectors(new Connector[]{ _connector });
-
+
_log=new ArrayList<>();
RequestLog log=new Log();
RequestLogHandler logHandler = new RequestLogHandler();
@@ -91,7 +94,7 @@ public class AsyncServletTest
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/ctx");
logHandler.setHandler(context);
-
+
_servletHandler=context.getServletHandler();
ServletHolder holder=new ServletHolder(_servlet);
holder.setAsyncSupported(true);
@@ -116,7 +119,7 @@ public class AsyncServletTest
public void testNormal() throws Exception
{
String response=process(null,null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n",response);
@@ -129,7 +132,7 @@ public class AsyncServletTest
public void testSleep() throws Exception
{
String response=process("sleep=200",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n",response);
@@ -139,33 +142,90 @@ public class AsyncServletTest
}
@Test
- public void testSuspend() throws Exception
+ public void testStart() throws Exception
{
_expectedCode="500 ";
- String response=process("suspend=200",null);
+ String response=process("start=200",null);
Assert.assertThat(response,Matchers.startsWith("HTTP/1.1 500 Async Timeout"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
+ "history: onTimeout\r\n"+
+ "history: ERROR /ctx/path/info\r\n"+
+ "history: !initial\r\n"+
+ "history: onComplete\r\n",response);
+
+ assertContains("ERROR DISPATCH: /ctx/path/info",response);
+ }
+
+ @Test
+ public void testStartOnTimeoutDispatch() throws Exception
+ {
+ String response=process("start=200&timeout=dispatch",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
+ assertContains(
+ "history: REQUEST /ctx/path/info\r\n"+
+ "history: initial\r\n"+
+ "history: start\r\n"+
+ "history: onTimeout\r\n"+
+ "history: dispatch\r\n"+
+ "history: ASYNC /ctx/path/info\r\n"+
+ "history: !initial\r\n"+
+ "history: onComplete\r\n",response);
+
+ assertContains("DISPATCHED",response);
+ }
+
+ @Test
+ public void testStartOnTimeoutError() throws Exception
+ {
+ _expectedCode="500 ";
+ String response=process("start=200&timeout=error",null);
+ assertThat(response,startsWith("HTTP/1.1 500 Async Exception\r\n"));
+ assertContains(
+ "history: REQUEST /ctx/path/info\r\n"+
+ "history: initial\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
+ "history: error\r\n"+
+ "history: onError\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
- assertContains("ERROR: /ctx/path/info",response);
+ assertContains("ERROR DISPATCH",response);
}
@Test
- public void testSuspendOnTimeoutDispatch() throws Exception
+ public void testStartOnTimeoutErrorComplete() throws Exception
{
- String response=process("suspend=200&timeout=dispatch",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&timeout=error&error=complete",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
+ "history: error\r\n"+
+ "history: onError\r\n"+
+ "history: complete\r\n",response);
+
+ assertContains("COMPLETED",response);
+ }
+
+ @Test
+ public void testStartOnTimeoutErrorDispatch() throws Exception
+ {
+ String response=process("start=200&timeout=error&error=dispatch",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
+ assertContains(
+ "history: REQUEST /ctx/path/info\r\n"+
+ "history: initial\r\n"+
+ "history: start\r\n"+
+ "history: onTimeout\r\n"+
+ "history: error\r\n"+
+ "history: onError\r\n"+
"history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
@@ -175,14 +235,14 @@ public class AsyncServletTest
}
@Test
- public void testSuspendOnTimeoutComplete() throws Exception
+ public void testStartOnTimeoutComplete() throws Exception
{
- String response=process("suspend=200&timeout=complete",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&timeout=complete",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: complete\r\n"+
"history: onComplete\r\n",response);
@@ -191,15 +251,15 @@ public class AsyncServletTest
}
@Test
- public void testSuspendWaitResume() throws Exception
+ public void testStartWaitDispatch() throws Exception
{
- String response=process("suspend=200&resume=10",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&dispatch=10",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -207,15 +267,15 @@ public class AsyncServletTest
}
@Test
- public void testSuspendResume() throws Exception
+ public void testStartDispatch() throws Exception
{
- String response=process("suspend=200&resume=0",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&dispatch=0",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -223,14 +283,32 @@ public class AsyncServletTest
}
@Test
- public void testSuspendWaitComplete() throws Exception
+ public void testStartError() throws Exception
{
- String response=process("suspend=200&complete=50",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ _expectedCode="500 ";
+ String response=process("start=200&throw=1",null);
+ assertThat(response,startsWith("HTTP/1.1 500 Server Error\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
+ /* TODO should there be an onError call?
+ "history: onError\r\n"+
+ "history: onComplete\r\n"
+ */"",
+ response);
+ assertContains("HTTP ERROR: 500",response);
+ }
+
+ @Test
+ public void testStartWaitComplete() throws Exception
+ {
+ String response=process("start=200&complete=50",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
+ assertContains(
+ "history: REQUEST /ctx/path/info\r\n"+
+ "history: initial\r\n"+
+ "history: start\r\n"+
"history: complete\r\n"+
"history: onComplete\r\n",response);
assertContains("COMPLETED",response);
@@ -239,14 +317,14 @@ public class AsyncServletTest
}
@Test
- public void testSuspendComplete() throws Exception
+ public void testStartComplete() throws Exception
{
- String response=process("suspend=200&complete=0",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&complete=0",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: complete\r\n"+
"history: onComplete\r\n",response);
assertContains("COMPLETED",response);
@@ -255,19 +333,20 @@ public class AsyncServletTest
}
@Test
- public void testSuspendWaitResumeSuspendWaitResume() throws Exception
+ public void testStartWaitDispatchStartWaitDispatch() throws Exception
{
- String response=process("suspend=1000&resume=10&suspend2=1000&resume2=10",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=1000&dispatch=10&start2=1000&dispatch2=10",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -275,58 +354,61 @@ public class AsyncServletTest
}
@Test
- public void testSuspendWaitResumeSuspendComplete() throws Exception
+ public void testStartWaitDispatchStartComplete() throws Exception
{
- String response=process("suspend=1000&resume=10&suspend2=1000&complete2=10",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=1000&dispatch=10&start2=1000&complete2=10",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
"history: complete\r\n"+
"history: onComplete\r\n",response);
assertContains("COMPLETED",response);
}
@Test
- public void testSuspendWaitResumeSuspend() throws Exception
+ public void testStartWaitDispatchStart() throws Exception
{
_expectedCode="500 ";
- String response=process("suspend=1000&resume=10&suspend2=10",null);
+ String response=process("start=1000&dispatch=10&start2=10",null);
assertEquals("HTTP/1.1 500 Async Timeout",response.substring(0,26));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
- assertContains("ERROR: /ctx/path/info",response);
+ assertContains("ERROR DISPATCH: /ctx/path/info",response);
}
@Test
- public void testSuspendTimeoutSuspendResume() throws Exception
+ public void testStartTimeoutStartDispatch() throws Exception
{
- String response=process("suspend=10&suspend2=1000&resume2=10",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=10&start2=1000&dispatch2=10",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -334,53 +416,55 @@ public class AsyncServletTest
}
@Test
- public void testSuspendTimeoutSuspendComplete() throws Exception
+ public void testStartTimeoutStartComplete() throws Exception
{
- String response=process("suspend=10&suspend2=1000&complete2=10",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=10&start2=1000&complete2=10",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
"history: complete\r\n"+
"history: onComplete\r\n",response);
assertContains("COMPLETED",response);
}
@Test
- public void testSuspendTimeoutSuspend() throws Exception
+ public void testStartTimeoutStart() throws Exception
{
_expectedCode="500 ";
- String response=process("suspend=10&suspend2=10",null);
+ String response=process("start=10&start2=10",null);
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
- "history: suspend\r\n"+
+ "history: onStartAsync\r\n"+
+ "history: start\r\n"+
"history: onTimeout\r\n"+
"history: ERROR /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
- assertContains("ERROR: /ctx/path/info",response);
+ assertContains("ERROR DISPATCH: /ctx/path/info",response);
}
@Test
public void testWrapStartDispatch() throws Exception
{
- String response=process("wrap=true&suspend=200&resume=20",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("wrap=true&start=200&dispatch=20",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: wrapped REQ RSP\r\n"+
"history: !initial\r\n"+
@@ -392,49 +476,49 @@ public class AsyncServletTest
@Test
public void testStartDispatchEncodedPath() throws Exception
{
- String response=process("suspend=200&resume=20&path=/p%20th3",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("start=200&dispatch=20&path=/p%20th3",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/p%20th3\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
assertContains("DISPATCHED",response);
}
-
-
+
+
@Test
public void testFwdStartDispatch() throws Exception
{
- String response=process("fwd","suspend=200&resume=20",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("fwd","start=200&dispatch=20",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: FWD REQUEST /ctx/fwd/info\r\n"+
"history: FORWARD /ctx/path1\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: FWD ASYNC /ctx/fwd/info\r\n"+
"history: FORWARD /ctx/path1\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
assertContains("DISPATCHED",response);
}
-
+
@Test
public void testFwdStartDispatchPath() throws Exception
{
- String response=process("fwd","suspend=200&resume=20&path=/path2",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("fwd","start=200&dispatch=20&path=/path2",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: FWD REQUEST /ctx/fwd/info\r\n"+
"history: FORWARD /ctx/path1\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path2\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -444,45 +528,45 @@ public class AsyncServletTest
@Test
public void testFwdWrapStartDispatch() throws Exception
{
- String response=process("fwd","wrap=true&suspend=200&resume=20",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("fwd","wrap=true&start=200&dispatch=20",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: FWD REQUEST /ctx/fwd/info\r\n"+
"history: FORWARD /ctx/path1\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path1\r\n"+
"history: wrapped REQ RSP\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
assertContains("DISPATCHED",response);
}
-
+
@Test
public void testFwdWrapStartDispatchPath() throws Exception
{
- String response=process("fwd","wrap=true&suspend=200&resume=20&path=/path2",null);
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ String response=process("fwd","wrap=true&start=200&dispatch=20&path=/path2",null);
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: FWD REQUEST /ctx/fwd/info\r\n"+
"history: FORWARD /ctx/path1\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
- "history: resume\r\n"+
+ "history: start\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path2\r\n"+
"history: wrapped REQ RSP\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
assertContains("DISPATCHED",response);
}
-
-
+
+
@Test
public void testAsyncRead() throws Exception
{
_expectedLogs=2;
- String header="GET /ctx/path/info?suspend=2000&resume=1500 HTTP/1.1\r\n"+
+ String header="GET /ctx/path/info?start=2000&dispatch=1500 HTTP/1.1\r\n"+
"Host: localhost\r\n"+
"Content-Length: 10\r\n"+
"\r\n";
@@ -503,13 +587,13 @@ public class AsyncServletTest
socket.getOutputStream().write(close.getBytes(StandardCharsets.ISO_8859_1));
String response = IO.toString(socket.getInputStream());
- assertEquals("HTTP/1.1 200 OK",response.substring(0,15));
+ assertThat(response,startsWith("HTTP/1.1 200 OK\r\n"));
assertContains(
"history: REQUEST /ctx/path/info\r\n"+
"history: initial\r\n"+
- "history: suspend\r\n"+
+ "history: start\r\n"+
"history: async-read=10\r\n"+
- "history: resume\r\n"+
+ "history: dispatch\r\n"+
"history: ASYNC /ctx/path/info\r\n"+
"history: !initial\r\n"+
"history: onComplete\r\n",response);
@@ -520,7 +604,7 @@ public class AsyncServletTest
{
return process("path",query,content);
}
-
+
public synchronized String process(String path,String query,String content) throws Exception
{
String request = "GET /ctx/"+path+"/info";
@@ -543,6 +627,7 @@ public class AsyncServletTest
{
socket.setSoTimeout(1000000);
socket.getOutputStream().write(request.getBytes(StandardCharsets.UTF_8));
+ socket.getOutputStream().flush();
return IO.toString(socket.getInputStream());
}
catch(Exception e)
@@ -574,7 +659,7 @@ public class AsyncServletTest
request.getServletContext().getRequestDispatcher("/path1").forward(request,response);
}
}
-
+
private static class AsyncServlet extends HttpServlet
{
private static final long serialVersionUID = -8161977157098646562L;
@@ -593,36 +678,36 @@ public class AsyncServletTest
{
// ignored
}
-
+
// System.err.println(request.getDispatcherType()+" "+request.getRequestURI());
response.addHeader("history",request.getDispatcherType()+" "+request.getRequestURI());
if (request instanceof ServletRequestWrapper || response instanceof ServletResponseWrapper)
response.addHeader("history","wrapped"+((request instanceof ServletRequestWrapper)?" REQ":"")+((response instanceof ServletResponseWrapper)?" RSP":""));
-
+
boolean wrap="true".equals(request.getParameter("wrap"));
int read_before=0;
long sleep_for=-1;
- long suspend_for=-1;
- long suspend2_for=-1;
- long resume_after=-1;
- long resume2_after=-1;
+ long start_for=-1;
+ long start2_for=-1;
+ long dispatch_after=-1;
+ long dispatch2_after=-1;
long complete_after=-1;
long complete2_after=-1;
-
+
if (request.getParameter("read")!=null)
read_before=Integer.parseInt(request.getParameter("read"));
if (request.getParameter("sleep")!=null)
sleep_for=Integer.parseInt(request.getParameter("sleep"));
- if (request.getParameter("suspend")!=null)
- suspend_for=Integer.parseInt(request.getParameter("suspend"));
- if (request.getParameter("suspend2")!=null)
- suspend2_for=Integer.parseInt(request.getParameter("suspend2"));
- if (request.getParameter("resume")!=null)
- resume_after=Integer.parseInt(request.getParameter("resume"));
+ if (request.getParameter("start")!=null)
+ start_for=Integer.parseInt(request.getParameter("start"));
+ if (request.getParameter("start2")!=null)
+ start2_for=Integer.parseInt(request.getParameter("start2"));
+ if (request.getParameter("dispatch")!=null)
+ dispatch_after=Integer.parseInt(request.getParameter("dispatch"));
final String path=request.getParameter("path");
- if (request.getParameter("resume2")!=null)
- resume2_after=Integer.parseInt(request.getParameter("resume2"));
+ if (request.getParameter("dispatch2")!=null)
+ dispatch2_after=Integer.parseInt(request.getParameter("dispatch2"));
if (request.getParameter("complete")!=null)
complete_after=Integer.parseInt(request.getParameter("complete"));
if (request.getParameter("complete2")!=null)
@@ -669,13 +754,16 @@ public class AsyncServletTest
}.start();
}
- if (suspend_for>=0)
+ if (start_for>=0)
{
final AsyncContext async=wrap?request.startAsync(new HttpServletRequestWrapper(request),new HttpServletResponseWrapper(response)):request.startAsync();
- if (suspend_for>0)
- async.setTimeout(suspend_for);
+ if (start_for>0)
+ async.setTimeout(start_for);
async.addListener(__listener);
- response.addHeader("history","suspend");
+ response.addHeader("history","start");
+
+ if ("1".equals(request.getParameter("throw")))
+ throw new QuietServletException(new Exception("test throw in async 1"));
if (complete_after>0)
{
@@ -709,15 +797,15 @@ public class AsyncServletTest
response.addHeader("history","complete");
async.complete();
}
- else if (resume_after>0)
+ else if (dispatch_after>0)
{
- TimerTask resume = new TimerTask()
+ TimerTask dispatch = new TimerTask()
{
@Override
public void run()
{
- ((HttpServletResponse)async.getResponse()).addHeader("history","resume");
- if (path!=null)
+ ((HttpServletResponse)async.getResponse()).addHeader("history","dispatch");
+ if (path!=null)
{
int q=path.indexOf('?');
String uriInContext=(q>=0)
@@ -731,13 +819,13 @@ public class AsyncServletTest
};
synchronized (_timer)
{
- _timer.schedule(resume,resume_after);
+ _timer.schedule(dispatch,dispatch_after);
}
}
- else if (resume_after==0)
+ else if (dispatch_after==0)
{
- ((HttpServletResponse)async.getResponse()).addHeader("history","resume");
- if (path!=null)
+ ((HttpServletResponse)async.getResponse()).addHeader("history","dispatch");
+ if (path!=null)
async.dispatch(path);
else
async.dispatch();
@@ -767,18 +855,20 @@ public class AsyncServletTest
{
response.addHeader("history","!initial");
- if (suspend2_for>=0 && request.getAttribute("2nd")==null)
+ if (start2_for>=0 && request.getAttribute("2nd")==null)
{
final AsyncContext async=wrap?request.startAsync(new HttpServletRequestWrapper(request),new HttpServletResponseWrapper(response)):request.startAsync();
async.addListener(__listener);
request.setAttribute("2nd","cycle");
- if (suspend2_for>0)
+ if (start2_for>0)
{
- async.setTimeout(suspend2_for);
+ async.setTimeout(start2_for);
}
- // continuation.addContinuationListener(__listener);
- response.addHeader("history","suspend");
+ response.addHeader("history","start");
+
+ if ("2".equals(request.getParameter("throw")))
+ throw new QuietServletException(new Exception("test throw in async 2"));
if (complete2_after>0)
{
@@ -812,23 +902,23 @@ public class AsyncServletTest
response.addHeader("history","complete");
async.complete();
}
- else if (resume2_after>0)
+ else if (dispatch2_after>0)
{
- TimerTask resume = new TimerTask()
+ TimerTask dispatch = new TimerTask()
{
@Override
public void run()
{
- response.addHeader("history","resume");
+ response.addHeader("history","dispatch");
async.dispatch();
}
};
synchronized (_timer)
{
- _timer.schedule(resume,resume2_after);
+ _timer.schedule(dispatch,dispatch2_after);
}
}
- else if (resume2_after==0)
+ else if (dispatch2_after==0)
{
response.addHeader("history","dispatch");
async.dispatch();
@@ -836,7 +926,7 @@ public class AsyncServletTest
}
else if(request.getDispatcherType()==DispatcherType.ERROR)
{
- response.getOutputStream().println("ERROR: "+request.getContextPath()+request.getServletPath()+request.getPathInfo());
+ response.getOutputStream().println("ERROR DISPATCH: "+request.getContextPath()+request.getServletPath()+request.getPathInfo());
}
else
{
@@ -858,12 +948,20 @@ public class AsyncServletTest
if (action!=null)
{
((HttpServletResponse)event.getSuppliedResponse()).addHeader("history",action);
- if ("dispatch".equals(action))
- event.getAsyncContext().dispatch();
- if ("complete".equals(action))
+
+ switch(action)
{
- event.getSuppliedResponse().getOutputStream().println("COMPLETED\n");
- event.getAsyncContext().complete();
+ case "dispatch":
+ event.getAsyncContext().dispatch();
+ break;
+
+ case "complete":
+ event.getSuppliedResponse().getOutputStream().println("COMPLETED\n");
+ event.getAsyncContext().complete();
+ break;
+
+ case "error":
+ throw new RuntimeException("error in onTimeout");
}
}
}
@@ -871,11 +969,30 @@ public class AsyncServletTest
@Override
public void onStartAsync(AsyncEvent event) throws IOException
{
+ ((HttpServletResponse)event.getSuppliedResponse()).addHeader("history","onStartAsync");
}
@Override
public void onError(AsyncEvent event) throws IOException
{
+ ((HttpServletResponse)event.getSuppliedResponse()).addHeader("history","onError");
+ String action=event.getSuppliedRequest().getParameter("error");
+ if (action!=null)
+ {
+ ((HttpServletResponse)event.getSuppliedResponse()).addHeader("history",action);
+
+ switch(action)
+ {
+ case "dispatch":
+ event.getAsyncContext().dispatch();
+ break;
+
+ case "complete":
+ event.getSuppliedResponse().getOutputStream().println("COMPLETED\n");
+ event.getAsyncContext().complete();
+ break;
+ }
+ }
}
@Override
@@ -889,7 +1006,7 @@ public class AsyncServletTest
{
@Override
public void log(Request request, Response response)
- {
+ {
int status = response.getCommittedMetaData().getStatus();
long written = response.getHttpChannel().getBytesWritten();
_log.add(status+" "+written+" "+request.getRequestURI());

Back to the top