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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user