Browse Source

MockHttpServletRequest.getRequestURL aligns with getServerName/Port

Issue: SPR-16138
pull/1587/head
Juergen Hoeller 8 years ago
parent
commit
0edf4d6509
  1. 21
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
  2. 36
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
  3. 36
      spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java

21
spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -1199,13 +1199,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override @Override
public StringBuffer getRequestURL() { public StringBuffer getRequestURL() {
StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName); String scheme = getScheme();
if (this.serverPort > 0 && ((HTTP.equalsIgnoreCase(this.scheme) && this.serverPort != 80) || String server = getServerName();
(HTTPS.equalsIgnoreCase(this.scheme) && this.serverPort != 443))) { int port = getServerPort();
url.append(':').append(this.serverPort); String uri = getRequestURI();
StringBuffer url = new StringBuffer(scheme).append("://").append(server);
if (port > 0 && ((HTTP.equalsIgnoreCase(scheme) && port != 80) ||
(HTTPS.equalsIgnoreCase(scheme) && port != 443))) {
url.append(':').append(port);
} }
if (StringUtils.hasText(getRequestURI())) { if (StringUtils.hasText(uri)) {
url.append(getRequestURI()); url.append(uri);
} }
return url; return url;
} }
@ -1318,12 +1323,12 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override @Override
@Nullable @Nullable
public Part getPart(String name) throws IOException, IllegalStateException, ServletException { public Part getPart(String name) throws IOException, ServletException {
return this.parts.getFirst(name); return this.parts.getFirst(name);
} }
@Override @Override
public Collection<Part> getParts() throws IOException, IllegalStateException, ServletException { public Collection<Part> getParts() throws IOException, ServletException {
List<Part> result = new LinkedList<>(); List<Part> result = new LinkedList<>();
for (List<Part> list : this.parts.values()) { for (List<Part> list : this.parts.values()) {
result.addAll(list); result.addAll(list);

36
spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

@ -82,7 +82,7 @@ public class MockHttpServletRequestTests {
} }
@Test @Test
public void setContentAndGetContentAsByteArray() throws IOException { public void setContentAndGetContentAsByteArray() {
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());
@ -152,9 +152,7 @@ public class MockHttpServletRequestTests {
assertEquals("UTF-8", request.getCharacterEncoding()); assertEquals("UTF-8", request.getCharacterEncoding());
} }
// SPR-12677 @Test // SPR-12677
@Test
public void setContentTypeHeaderWithMoreComplexCharsetSyntax() { public void setContentTypeHeaderWithMoreComplexCharsetSyntax() {
String contentType = "test/plain;charset=\"utf-8\";foo=\"charset=bar\";foocharset=bar;foo=bar"; String contentType = "test/plain;charset=\"utf-8\";foo=\"charset=bar\";foocharset=bar;foo=bar";
request.addHeader("Content-Type", contentType); request.addHeader("Content-Type", contentType);
@ -182,7 +180,7 @@ public class MockHttpServletRequestTests {
} }
@Test @Test
public void httpHeaderNameCasingIsPreserved() throws Exception { public void httpHeaderNameCasingIsPreserved() {
String headerName = "Header1"; String headerName = "Header1";
request.addHeader(headerName, "value1"); request.addHeader(headerName, "value1");
Enumeration<String> requestHeaders = request.getHeaderNames(); Enumeration<String> requestHeaders = request.getHeaderNames();
@ -402,6 +400,22 @@ public class MockHttpServletRequestTests {
assertEquals("http://localhost", requestURL.toString()); assertEquals("http://localhost", requestURL.toString());
} }
@Test // SPR-16138
public void getRequestURLWithHostHeader() {
String testServer = "test.server";
request.addHeader(HOST, testServer);
StringBuffer requestURL = request.getRequestURL();
assertEquals("http://" + testServer, requestURL.toString());
}
@Test // SPR-16138
public void getRequestURLWithHostHeaderAndPort() {
String testServer = "test.server:9999";
request.addHeader(HOST, testServer);
StringBuffer requestURL = request.getRequestURL();
assertEquals("http://" + testServer, requestURL.toString());
}
@Test @Test
public void getRequestURLWithNullRequestUri() { public void getRequestURLWithNullRequestUri() {
request.setRequestURI(null); request.setRequestURI(null);
@ -457,39 +471,39 @@ public class MockHttpServletRequestTests {
} }
@Test @Test
public void httpHeaderDate() throws Exception { public void httpHeaderDate() {
Date date = new Date(); Date date = new Date();
request.addHeader(IF_MODIFIED_SINCE, date); request.addHeader(IF_MODIFIED_SINCE, date);
assertEquals(date.getTime(), request.getDateHeader(IF_MODIFIED_SINCE)); assertEquals(date.getTime(), request.getDateHeader(IF_MODIFIED_SINCE));
} }
@Test @Test
public void httpHeaderTimestamp() throws Exception { public void httpHeaderTimestamp() {
long timestamp = new Date().getTime(); long timestamp = new Date().getTime();
request.addHeader(IF_MODIFIED_SINCE, timestamp); request.addHeader(IF_MODIFIED_SINCE, timestamp);
assertEquals(timestamp, request.getDateHeader(IF_MODIFIED_SINCE)); assertEquals(timestamp, request.getDateHeader(IF_MODIFIED_SINCE));
} }
@Test @Test
public void httpHeaderRfcFormatedDate() throws Exception { public void httpHeaderRfcFormatedDate() {
request.addHeader(IF_MODIFIED_SINCE, "Tue, 21 Jul 2015 10:00:00 GMT"); request.addHeader(IF_MODIFIED_SINCE, "Tue, 21 Jul 2015 10:00:00 GMT");
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE)); assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
} }
@Test @Test
public void httpHeaderFirstVariantFormatedDate() throws Exception { public void httpHeaderFirstVariantFormatedDate() {
request.addHeader(IF_MODIFIED_SINCE, "Tue, 21-Jul-15 10:00:00 GMT"); request.addHeader(IF_MODIFIED_SINCE, "Tue, 21-Jul-15 10:00:00 GMT");
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE)); assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
} }
@Test @Test
public void httpHeaderSecondVariantFormatedDate() throws Exception { public void httpHeaderSecondVariantFormatedDate() {
request.addHeader(IF_MODIFIED_SINCE, "Tue Jul 21 10:00:00 2015"); request.addHeader(IF_MODIFIED_SINCE, "Tue Jul 21 10:00:00 2015");
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE)); assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void httpHeaderFormatedDateError() throws Exception { public void httpHeaderFormatedDateError() {
request.addHeader(IF_MODIFIED_SINCE, "This is not a date"); request.addHeader(IF_MODIFIED_SINCE, "This is not a date");
request.getDateHeader(IF_MODIFIED_SINCE); request.getDateHeader(IF_MODIFIED_SINCE);
} }

36
spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java

@ -62,6 +62,7 @@ import org.springframework.util.Assert;
import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -404,7 +405,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/** /**
* Get the content of the request body as a byte array. * Get the content of the request body as a byte array.
* @return the content as a byte array, potentially {@code null} * @return the content as a byte array (potentially {@code null})
* @since 5.0 * @since 5.0
* @see #setContent(byte[]) * @see #setContent(byte[])
* @see #getContentAsString() * @see #getContentAsString()
@ -588,7 +589,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override @Override
public String getParameter(String name) { public String getParameter(String name) {
String[] arr = (name != null ? this.parameters.get(name) : null); Assert.notNull(name, "Parameter name must not be null");
String[] arr = this.parameters.get(name);
return (arr != null && arr.length > 0 ? arr[0] : null); return (arr != null && arr.length > 0 ? arr[0] : null);
} }
@ -599,7 +601,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override @Override
public String[] getParameterValues(String name) { public String[] getParameterValues(String name) {
return (name != null ? this.parameters.get(name) : null); Assert.notNull(name, "Parameter name must not be null");
return this.parameters.get(name);
} }
@Override @Override
@ -927,10 +930,10 @@ public class MockHttpServletRequest implements HttpServletRequest {
} }
public void setCookies(Cookie... cookies) { public void setCookies(Cookie... cookies) {
this.cookies = cookies; this.cookies = (ObjectUtils.isEmpty(cookies) ? null : cookies);
this.headers.remove(HttpHeaders.COOKIE); this.headers.remove(HttpHeaders.COOKIE);
if (cookies != null) { if (this.cookies != null) {
Arrays.stream(cookies) Arrays.stream(this.cookies)
.map(c -> c.getName() + '=' + (c.getValue() == null ? "" : c.getValue())) .map(c -> c.getName() + '=' + (c.getValue() == null ? "" : c.getValue()))
.forEach(value -> doAddHeaderValue(HttpHeaders.COOKIE, value, false)); .forEach(value -> doAddHeaderValue(HttpHeaders.COOKIE, value, false));
} }
@ -1164,13 +1167,18 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override @Override
public StringBuffer getRequestURL() { public StringBuffer getRequestURL() {
StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName); String scheme = getScheme();
if (this.serverPort > 0 && ((HTTP.equalsIgnoreCase(this.scheme) && this.serverPort != 80) || String server = getServerName();
(HTTPS.equalsIgnoreCase(this.scheme) && this.serverPort != 443))) { int port = getServerPort();
url.append(':').append(this.serverPort); String uri = getRequestURI();
StringBuffer url = new StringBuffer(scheme).append("://").append(server);
if (port > 0 && ((HTTP.equalsIgnoreCase(scheme) && port != 80) ||
(HTTPS.equalsIgnoreCase(scheme) && port != 443))) {
url.append(':').append(port);
} }
if (StringUtils.hasText(getRequestURI())) { if (StringUtils.hasText(uri)) {
url.append(getRequestURI()); url.append(uri);
} }
return url; return url;
} }
@ -1280,12 +1288,12 @@ public class MockHttpServletRequest implements HttpServletRequest {
} }
@Override @Override
public Part getPart(String name) throws IOException, IllegalStateException, ServletException { public Part getPart(String name) throws IOException, ServletException {
return this.parts.getFirst(name); return this.parts.getFirst(name);
} }
@Override @Override
public Collection<Part> getParts() throws IOException, IllegalStateException, ServletException { public Collection<Part> getParts() throws IOException, ServletException {
List<Part> result = new LinkedList<>(); List<Part> result = new LinkedList<>();
for (List<Part> list : this.parts.values()) { for (List<Part> list : this.parts.values()) {
result.addAll(list); result.addAll(list);

Loading…
Cancel
Save