Support multiple async starts in MockHttpServletRequest

Closes gh-33457
This commit is contained in:
Brian Clozel
2024-08-30 20:08:36 +02:00
parent 5927b70dfe
commit fab889009a
3 changed files with 98 additions and 2 deletions

View File

@@ -44,6 +44,8 @@ import java.util.TimeZone;
import java.util.stream.Collectors;
import jakarta.servlet.AsyncContext;
import jakarta.servlet.AsyncEvent;
import jakarta.servlet.AsyncListener;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletConnection;
@@ -920,7 +922,19 @@ public class MockHttpServletRequest implements HttpServletRequest {
public AsyncContext startAsync(ServletRequest request, @Nullable ServletResponse response) {
Assert.state(this.asyncSupported, "Async not supported");
this.asyncStarted = true;
this.asyncContext = new MockAsyncContext(request, response);
MockAsyncContext newAsyncContext = new MockAsyncContext(request, response);
if (this.asyncContext != null) {
try {
AsyncEvent startEvent = new AsyncEvent(newAsyncContext);
for (AsyncListener asyncListener : this.asyncContext.getListeners()) {
asyncListener.onStartAsync(startEvent);
}
}
catch (IOException ex) {
// ignore failures
}
}
this.asyncContext = newAsyncContext;
return this.asyncContext;
}