diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockAsyncContext.java b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockAsyncContext.java index c5bc08dc4b..e6d97658c7 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockAsyncContext.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockAsyncContext.java @@ -26,6 +26,8 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.mock.web.MockHttpServletRequest; @@ -40,9 +42,9 @@ import org.springframework.web.util.WebUtils; */ class MockAsyncContext implements AsyncContext { - private final ServletRequest request; + private final HttpServletRequest request; - private final ServletResponse response; + private final HttpServletResponse response; private final List listeners = new ArrayList(); @@ -52,8 +54,8 @@ class MockAsyncContext implements AsyncContext { public MockAsyncContext(ServletRequest request, ServletResponse response) { - this.request = request; - this.response = response; + this.request = (HttpServletRequest) request; + this.response = (HttpServletResponse) response; } public ServletRequest getRequest() { @@ -73,7 +75,7 @@ class MockAsyncContext implements AsyncContext { } public void dispatch() { - dispatch(null); + dispatch(this.request.getRequestURI()); } public void dispatch(String path) { @@ -89,13 +91,12 @@ class MockAsyncContext implements AsyncContext { if (mockRequest != null) { mockRequest.setAsyncStarted(false); } - for (AsyncListener listener : this.listeners) { try { listener.onComplete(new AsyncEvent(this, this.request, this.response)); } catch (IOException e) { - throw new IllegalStateException("AsyncListener failed", e); + throw new IllegalStateException("AsyncListener failure", e); } } } diff --git a/spring-web/src/test/java/org/springframework/mock/web/MockAsyncContext.java b/spring-web/src/test/java/org/springframework/mock/web/MockAsyncContext.java index 9607213e45..74b4b0843e 100644 --- a/spring-web/src/test/java/org/springframework/mock/web/MockAsyncContext.java +++ b/spring-web/src/test/java/org/springframework/mock/web/MockAsyncContext.java @@ -22,11 +22,12 @@ import java.util.List; import javax.servlet.AsyncContext; import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; -import javax.servlet.DispatcherType; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.web.util.WebUtils; @@ -39,22 +40,20 @@ import org.springframework.web.util.WebUtils; */ public class MockAsyncContext implements AsyncContext { - private final ServletRequest request; + private final HttpServletRequest request; - private final ServletResponse response; - - private final MockHttpServletRequest mockRequest; + private final HttpServletResponse response; private final List listeners = new ArrayList(); - private String dispatchPath; + private String dispatchedPath; + + private long timeout = 10 * 1000L; // 10 seconds is Tomcat's default - private long timeout = 10 * 60 * 1000L; public MockAsyncContext(ServletRequest request, ServletResponse response) { - this.request = request; - this.response = response; - this.mockRequest = WebUtils.getNativeRequest(request, MockHttpServletRequest.class); + this.request = (HttpServletRequest) request; + this.response = (HttpServletResponse) response; } public ServletRequest getRequest() { @@ -66,15 +65,15 @@ public class MockAsyncContext implements AsyncContext { } public boolean hasOriginalRequestAndResponse() { - return false; + return (this.request instanceof MockHttpServletRequest) && (this.response instanceof MockHttpServletResponse); } - public String getDispatchPath() { - return this.dispatchPath; + public String getDispatchedPath() { + return this.dispatchedPath; } public void dispatch() { - dispatch(null); + dispatch(this.request.getRequestURI()); } public void dispatch(String path) { @@ -82,16 +81,13 @@ public class MockAsyncContext implements AsyncContext { } public void dispatch(ServletContext context, String path) { - this.dispatchPath = path; - if (this.mockRequest != null) { - this.mockRequest.setDispatcherType(DispatcherType.ASYNC); - this.mockRequest.setAsyncStarted(false); - } + this.dispatchedPath = path; } public void complete() { - if (this.mockRequest != null) { - this.mockRequest.setAsyncStarted(false); + MockHttpServletRequest mockRequest = WebUtils.getNativeRequest(request, MockHttpServletRequest.class); + if (mockRequest != null) { + mockRequest.setAsyncStarted(false); } for (AsyncListener listener : this.listeners) { try { @@ -103,7 +99,8 @@ public class MockAsyncContext implements AsyncContext { } } - public void start(Runnable run) { + public void start(Runnable runnable) { + runnable.run(); } public List getListeners() { diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java index cae90eac72..691a213a6b 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/WebAsyncManagerTimeoutTests.java @@ -34,6 +34,7 @@ import javax.servlet.DispatcherType; import org.junit.Before; import org.junit.Test; import org.springframework.core.task.AsyncTaskExecutor; +import org.springframework.mock.web.MockAsyncContext; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.web.context.request.NativeWebRequest; @@ -57,7 +58,7 @@ public class WebAsyncManagerTimeoutTests { @Before public void setUp() { - this.servletRequest = new MockHttpServletRequest(); + this.servletRequest = new MockHttpServletRequest("GET", "/test"); this.servletRequest.setAsyncSupported(true); this.asyncWebRequest = new StandardServletAsyncWebRequest(servletRequest, new MockHttpServletResponse()); @@ -107,7 +108,7 @@ public class WebAsyncManagerTimeoutTests { this.asyncWebRequest.onTimeout(ASYNC_EVENT); assertEquals(22, this.asyncManager.getConcurrentResult()); - assertEquals(DispatcherType.ASYNC, this.servletRequest.getDispatcherType()); + assertEquals("/test", ((MockAsyncContext) this.servletRequest.getAsyncContext()).getDispatchedPath()); verify(interceptor); } @@ -128,7 +129,7 @@ public class WebAsyncManagerTimeoutTests { this.asyncWebRequest.onTimeout(ASYNC_EVENT); assertEquals(exception, this.asyncManager.getConcurrentResult()); - assertEquals(DispatcherType.ASYNC, this.servletRequest.getDispatcherType()); + assertEquals("/test", ((MockAsyncContext) this.servletRequest.getAsyncContext()).getDispatchedPath()); verify(interceptor); } @@ -174,7 +175,7 @@ public class WebAsyncManagerTimeoutTests { this.asyncWebRequest.onTimeout(event); assertEquals(23, this.asyncManager.getConcurrentResult()); - assertEquals(DispatcherType.ASYNC, this.servletRequest.getDispatcherType()); + assertEquals("/test", ((MockAsyncContext) this.servletRequest.getAsyncContext()).getDispatchedPath()); } @Test @@ -195,7 +196,7 @@ public class WebAsyncManagerTimeoutTests { this.asyncWebRequest.onTimeout(event); assertEquals(23, this.asyncManager.getConcurrentResult()); - assertEquals(DispatcherType.ASYNC, this.servletRequest.getDispatcherType()); + assertEquals("/test", ((MockAsyncContext) this.servletRequest.getAsyncContext()).getDispatchedPath()); } @Test @@ -217,7 +218,7 @@ public class WebAsyncManagerTimeoutTests { this.asyncWebRequest.onTimeout(event); assertEquals(exception, this.asyncManager.getConcurrentResult()); - assertEquals(DispatcherType.ASYNC, this.servletRequest.getDispatcherType()); + assertEquals("/test", ((MockAsyncContext) this.servletRequest.getAsyncContext()).getDispatchedPath()); } diff --git a/spring-webmvc/src/test/java/org/springframework/mock/web/MockAsyncContext.java b/spring-webmvc/src/test/java/org/springframework/mock/web/MockAsyncContext.java index 9607213e45..74b4b0843e 100644 --- a/spring-webmvc/src/test/java/org/springframework/mock/web/MockAsyncContext.java +++ b/spring-webmvc/src/test/java/org/springframework/mock/web/MockAsyncContext.java @@ -22,11 +22,12 @@ import java.util.List; import javax.servlet.AsyncContext; import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; -import javax.servlet.DispatcherType; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; import org.springframework.web.util.WebUtils; @@ -39,22 +40,20 @@ import org.springframework.web.util.WebUtils; */ public class MockAsyncContext implements AsyncContext { - private final ServletRequest request; + private final HttpServletRequest request; - private final ServletResponse response; - - private final MockHttpServletRequest mockRequest; + private final HttpServletResponse response; private final List listeners = new ArrayList(); - private String dispatchPath; + private String dispatchedPath; + + private long timeout = 10 * 1000L; // 10 seconds is Tomcat's default - private long timeout = 10 * 60 * 1000L; public MockAsyncContext(ServletRequest request, ServletResponse response) { - this.request = request; - this.response = response; - this.mockRequest = WebUtils.getNativeRequest(request, MockHttpServletRequest.class); + this.request = (HttpServletRequest) request; + this.response = (HttpServletResponse) response; } public ServletRequest getRequest() { @@ -66,15 +65,15 @@ public class MockAsyncContext implements AsyncContext { } public boolean hasOriginalRequestAndResponse() { - return false; + return (this.request instanceof MockHttpServletRequest) && (this.response instanceof MockHttpServletResponse); } - public String getDispatchPath() { - return this.dispatchPath; + public String getDispatchedPath() { + return this.dispatchedPath; } public void dispatch() { - dispatch(null); + dispatch(this.request.getRequestURI()); } public void dispatch(String path) { @@ -82,16 +81,13 @@ public class MockAsyncContext implements AsyncContext { } public void dispatch(ServletContext context, String path) { - this.dispatchPath = path; - if (this.mockRequest != null) { - this.mockRequest.setDispatcherType(DispatcherType.ASYNC); - this.mockRequest.setAsyncStarted(false); - } + this.dispatchedPath = path; } public void complete() { - if (this.mockRequest != null) { - this.mockRequest.setAsyncStarted(false); + MockHttpServletRequest mockRequest = WebUtils.getNativeRequest(request, MockHttpServletRequest.class); + if (mockRequest != null) { + mockRequest.setAsyncStarted(false); } for (AsyncListener listener : this.listeners) { try { @@ -103,7 +99,8 @@ public class MockAsyncContext implements AsyncContext { } } - public void start(Runnable run) { + public void start(Runnable runnable) { + runnable.run(); } public List getListeners() {