From bfc5ad890ed8519f23e8e3983e5e29dcc3fdcaf7 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 12 Oct 2018 16:00:31 +0200 Subject: [PATCH] MockHttpServletRequest resets InputStream/Reader on setContent Issue: SPR-17373 --- .../mock/web/MockHttpServletRequest.java | 2 ++ .../mock/web/MockHttpServletRequestTests.java | 24 +++++++++++++------ .../mock/web/test/MockHttpServletRequest.java | 2 ++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 056c398ac1..46e1ebf440 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -423,6 +423,8 @@ public class MockHttpServletRequest implements HttpServletRequest { */ public void setContent(@Nullable byte[] content) { this.content = content; + this.inputStream = null; + this.reader = null; } /** diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java index 8d1c269844..eec905b530 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java @@ -34,6 +34,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.springframework.http.HttpHeaders; +import org.springframework.util.FileCopyUtils; import org.springframework.util.StreamUtils; import static org.junit.Assert.*; @@ -74,8 +75,23 @@ public class MockHttpServletRequestTests { byte[] bytes = "body".getBytes(Charset.defaultCharset()); request.setContent(bytes); assertEquals(bytes.length, request.getContentLength()); - assertNotNull(request.getInputStream()); 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 @@ -83,7 +99,6 @@ public class MockHttpServletRequestTests { byte[] bytes = "request body".getBytes(); request.setContent(bytes); assertEquals(bytes.length, request.getContentLength()); - assertNotNull(request.getContentAsByteArray()); assertEquals(bytes, request.getContentAsByteArray()); } @@ -101,14 +116,12 @@ public class MockHttpServletRequestTests { request.setCharacterEncoding("UTF-16"); request.setContent(bytes); assertEquals(bytes.length, request.getContentLength()); - assertNotNull(request.getContentAsString()); assertEquals(palindrome, request.getContentAsString()); } @Test public void noContent() throws IOException { assertEquals(-1, request.getContentLength()); - assertNotNull(request.getInputStream()); assertEquals(-1, request.getInputStream().read()); assertNull(request.getContentAsByteArray()); } @@ -213,7 +226,6 @@ public class MockHttpServletRequestTests { String headerName = "Header1"; request.addHeader(headerName, "value1"); Enumeration requestHeaders = request.getHeaderNames(); - assertNotNull(requestHeaders); assertEquals("HTTP header casing not being preserved", headerName, requestHeaders.nextElement()); } @@ -545,8 +557,6 @@ public class MockHttpServletRequestTests { } private void assertEqualEnumerations(Enumeration enum1, Enumeration enum2) { - assertNotNull(enum1); - assertNotNull(enum2); int count = 0; while (enum1.hasMoreElements()) { assertTrue("enumerations must be equal in length", enum2.hasMoreElements()); diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java index 3ded915864..3b64054a1a 100644 --- a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java +++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java @@ -423,6 +423,8 @@ public class MockHttpServletRequest implements HttpServletRequest { */ public void setContent(@Nullable byte[] content) { this.content = content; + this.inputStream = null; + this.reader = null; } /**