Support implicit ports in MHSR.getRequestURL()

Prior to this commit, MockHttpServletRequest.getRequestURL() always
included the server port number in the reconstructed request URL, even
for implicit ports (i.e., 80 and 443) and negative ports.

MockHttpServletRequest.getRequestURL() now omits the port number when
reconstructing a URL that has an implicit or negative port.

Issue: SPR-9726
This commit is contained in:
Sam Brannen 2013-06-09 11:55:24 +02:00
parent 97d152547d
commit 86591e5e5a
2 changed files with 41 additions and 2 deletions

View File

@ -36,6 +36,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.servlet.AsyncContext;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
@ -946,8 +947,13 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
public StringBuffer getRequestURL() {
StringBuffer url = new StringBuffer(this.scheme);
url.append("://").append(this.serverName).append(':').append(this.serverPort);
StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName);
if (this.serverPort > 0
&& (("http".equalsIgnoreCase(scheme) && this.serverPort != 80) || ("https".equalsIgnoreCase(scheme) && this.serverPort != 443))) {
url.append(':').append(this.serverPort);
}
url.append(getRequestURI());
return url;
}

View File

@ -193,6 +193,39 @@ public class MockHttpServletRequestTests {
assertEqualEnumerations(Collections.enumeration(preferredLocales), request.getLocales());
}
@Test
public void getRequestURL() {
request.setServerPort(8080);
request.setRequestURI("/path");
assertEquals("http://localhost:8080/path", request.getRequestURL().toString());
request.setScheme("https");
request.setServerName("example.com");
request.setServerPort(8443);
assertEquals("https://example.com:8443/path", request.getRequestURL().toString());
}
@Test
public void getRequestURLWithDefaults() {
StringBuffer requestURL = request.getRequestURL();
assertEquals("http://localhost", requestURL.toString());
}
@Test
public void getRequestURLWithDefaultsAndHttps() {
request.setScheme("https");
request.setServerPort(443);
StringBuffer requestURL = request.getRequestURL();
assertEquals("https://localhost", requestURL.toString());
}
@Test
public void getRequestURLWithNegativePort() {
request.setServerPort(-99);
StringBuffer requestURL = request.getRequestURL();
assertEquals("http://localhost", requestURL.toString());
}
private void assertEqualEnumerations(Enumeration<?> enum1, Enumeration<?> enum2) {
assertNotNull(enum1);
assertNotNull(enum2);