MockHttpServletRequest resets InputStream/Reader on setContent

Issue: SPR-17373
This commit is contained in:
Juergen Hoeller 2018-10-12 16:00:31 +02:00
parent b7e4a56e5c
commit bfc5ad890e
3 changed files with 21 additions and 7 deletions

View File

@ -423,6 +423,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
*/ */
public void setContent(@Nullable byte[] content) { public void setContent(@Nullable byte[] content) {
this.content = content; this.content = content;
this.inputStream = null;
this.reader = null;
} }
/** /**

View File

@ -34,6 +34,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -74,8 +75,23 @@ public class MockHttpServletRequestTests {
byte[] bytes = "body".getBytes(Charset.defaultCharset()); byte[] bytes = "body".getBytes(Charset.defaultCharset());
request.setContent(bytes); request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength()); assertEquals(bytes.length, request.getContentLength());
assertNotNull(request.getInputStream());
assertEquals("body", StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset())); assertEquals("body", StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset()));
request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength());
assertEquals("body", StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset()));
}
@Test
public void setContentAndGetReader() throws IOException {
byte[] bytes = "body".getBytes(Charset.defaultCharset());
request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength());
assertEquals("body", FileCopyUtils.copyToString(request.getReader()));
request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength());
assertEquals("body", FileCopyUtils.copyToString(request.getReader()));
} }
@Test @Test
@ -83,7 +99,6 @@ public class MockHttpServletRequestTests {
byte[] bytes = "request body".getBytes(); byte[] bytes = "request body".getBytes();
request.setContent(bytes); request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength()); assertEquals(bytes.length, request.getContentLength());
assertNotNull(request.getContentAsByteArray());
assertEquals(bytes, request.getContentAsByteArray()); assertEquals(bytes, request.getContentAsByteArray());
} }
@ -101,14 +116,12 @@ public class MockHttpServletRequestTests {
request.setCharacterEncoding("UTF-16"); request.setCharacterEncoding("UTF-16");
request.setContent(bytes); request.setContent(bytes);
assertEquals(bytes.length, request.getContentLength()); assertEquals(bytes.length, request.getContentLength());
assertNotNull(request.getContentAsString());
assertEquals(palindrome, request.getContentAsString()); assertEquals(palindrome, request.getContentAsString());
} }
@Test @Test
public void noContent() throws IOException { public void noContent() throws IOException {
assertEquals(-1, request.getContentLength()); assertEquals(-1, request.getContentLength());
assertNotNull(request.getInputStream());
assertEquals(-1, request.getInputStream().read()); assertEquals(-1, request.getInputStream().read());
assertNull(request.getContentAsByteArray()); assertNull(request.getContentAsByteArray());
} }
@ -213,7 +226,6 @@ public class MockHttpServletRequestTests {
String headerName = "Header1"; String headerName = "Header1";
request.addHeader(headerName, "value1"); request.addHeader(headerName, "value1");
Enumeration<String> requestHeaders = request.getHeaderNames(); Enumeration<String> requestHeaders = request.getHeaderNames();
assertNotNull(requestHeaders);
assertEquals("HTTP header casing not being preserved", headerName, requestHeaders.nextElement()); assertEquals("HTTP header casing not being preserved", headerName, requestHeaders.nextElement());
} }
@ -545,8 +557,6 @@ public class MockHttpServletRequestTests {
} }
private void assertEqualEnumerations(Enumeration<?> enum1, Enumeration<?> enum2) { private void assertEqualEnumerations(Enumeration<?> enum1, Enumeration<?> enum2) {
assertNotNull(enum1);
assertNotNull(enum2);
int count = 0; int count = 0;
while (enum1.hasMoreElements()) { while (enum1.hasMoreElements()) {
assertTrue("enumerations must be equal in length", enum2.hasMoreElements()); assertTrue("enumerations must be equal in length", enum2.hasMoreElements());

View File

@ -423,6 +423,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
*/ */
public void setContent(@Nullable byte[] content) { public void setContent(@Nullable byte[] content) {
this.content = content; this.content = content;
this.inputStream = null;
this.reader = null;
} }
/** /**