Honor Host header for server name/port in MckHtSrvRq

Prior to this commit, the getServerName() and getServerPort() methods
in MockHttpServletRequest simply returned the 'mocked' serverName and
serverPort but ignored the 'Host' header entirely. Per the Servlet
specification, however, these methods must parse the server name or
port from the 'Host' header if it is present and otherwise fall back to
the resolved server name or port.

This commit fixes this by ensuring that getServerName() and
getServerPort() properly parse the server's name or port from the
'Host' header if it is present in the request. If the 'Host' header is
not present, MockHttpServletRequest falls back to returning the
'mocked' serverName and serverPort.

Issue: SPR-12088
This commit is contained in:
Sam Brannen
2014-08-19 00:08:09 +02:00
parent 51e4b07856
commit 110be33337
2 changed files with 113 additions and 0 deletions

View File

@@ -42,6 +42,8 @@ import static org.junit.Assert.*;
*/
public class MockHttpServletRequestTests {
private static final String HOST = "Host";
private MockHttpServletRequest request = new MockHttpServletRequest();
@@ -212,6 +214,86 @@ public class MockHttpServletRequestTests {
assertEqualEnumerations(Collections.enumeration(preferredLocales), request.getLocales());
}
@Test
public void getServerNameWithDefaultName() {
assertEquals("localhost", request.getServerName());
}
@Test
public void getServerNameWithCustomName() {
request.setServerName("example.com");
assertEquals("example.com", request.getServerName());
}
@Test
public void getServerNameViaHostHeaderWithoutPort() {
String testServer = "test.server";
request.addHeader(HOST, testServer);
assertEquals(testServer, request.getServerName());
}
@Test
public void getServerNameViaHostHeaderWithPort() {
String testServer = "test.server";
request.addHeader(HOST, testServer + ":8080");
assertEquals(testServer, request.getServerName());
}
@Test
public void getServerNameViaHostHeaderAsIpv6AddressWithoutPort() {
String ipv6Address = "[2001:db8:0:1]";
request.addHeader(HOST, ipv6Address);
assertEquals("2001:db8:0:1", request.getServerName());
}
@Test
public void getServerNameViaHostHeaderAsIpv6AddressWithPort() {
String ipv6Address = "[2001:db8:0:1]:8081";
request.addHeader(HOST, ipv6Address);
assertEquals("2001:db8:0:1", request.getServerName());
}
@Test
public void getServerPortWithDefaultPort() {
assertEquals(80, request.getServerPort());
}
@Test
public void getServerPortWithCustomPort() {
request.setServerPort(8080);
assertEquals(8080, request.getServerPort());
}
@Test
public void getServerPortViaHostHeaderAsIpv6AddressWithoutPort() {
String testServer = "[2001:db8:0:1]";
request.addHeader(HOST, testServer);
assertEquals(80, request.getServerPort());
}
@Test
public void getServerPortViaHostHeaderAsIpv6AddressWithPort() {
String testServer = "[2001:db8:0:1]";
int testPort = 9999;
request.addHeader(HOST, testServer + ":" + testPort);
assertEquals(testPort, request.getServerPort());
}
@Test
public void getServerPortViaHostHeaderWithoutPort() {
String testServer = "test.server";
request.addHeader(HOST, testServer);
assertEquals(80, request.getServerPort());
}
@Test
public void getServerPortViaHostHeaderWithPort() {
String testServer = "test.server";
int testPort = 9999;
request.addHeader(HOST, testServer + ":" + testPort);
assertEquals(testPort, request.getServerPort());
}
@Test
public void getRequestURL() {
request.setServerPort(8080);