AbstractServerHttpResponse skips commit actions on 2nd pass

Closes gh-25753
This commit is contained in:
Rossen Stoyanchev
2020-09-13 21:07:25 +01:00
parent 0db3f2b4de
commit b50ad1b9aa
2 changed files with 29 additions and 15 deletions

View File

@@ -33,6 +33,7 @@ import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DefaultDataBuffer;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseCookie;
@@ -150,7 +151,7 @@ public class ServerHttpResponseTests {
assertThat(response.getCookies().getFirst("ID")).isSameAs(cookie);
}
@Test // gh-24186
@Test // gh-24186, gh-25753
void beforeCommitErrorShouldLeaveResponseNotCommitted() {
Consumer<Supplier<Mono<Void>>> tester = preCommitAction -> {
@@ -168,6 +169,15 @@ public class ServerHttpResponseTests {
assertThat(response.cookiesWritten).isFalse();
assertThat(response.isCommitted()).isFalse();
assertThat(response.getHeaders()).isEmpty();
// Handle the error
response.setStatusCode(HttpStatus.SERVICE_UNAVAILABLE);
StepVerifier.create(response.setComplete()).verifyComplete();
assertThat(response.statusCodeWritten).isTrue();
assertThat(response.headersWritten).isTrue();
assertThat(response.cookiesWritten).isTrue();
assertThat(response.isCommitted()).isTrue();
};
tester.accept(() -> Mono.error(new IllegalStateException("Max sessions")));