From fa856578013eaaff58578bf2c84849ed33eb2617 Mon Sep 17 00:00:00 2001 From: "greg.lee" Date: Tue, 16 May 2023 23:51:36 +0900 Subject: [PATCH] Introduce method in MockHttpServletRequestBuilder to set remote address Co-authored-by: Sam Brannen See gh-30510 Closes gh-30497 --- .../MockHttpServletRequestBuilder.java | 20 +++++++++++++++++++ .../MockHttpServletRequestBuilderTests.java | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index 70a8b971825..cb3fd23fd04 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -103,6 +103,9 @@ public class MockHttpServletRequestBuilder @Nullable private MockHttpSession session; + @Nullable + private String remoteAddress; + @Nullable private String characterEncoding; @@ -526,6 +529,17 @@ public class MockHttpServletRequestBuilder return this; } + /** + * Set the remote address of the request. + * @param remoteAddress the remote address (IP) + * @since 6.0.10 + */ + public MockHttpServletRequestBuilder remoteAddress(String remoteAddress) { + Assert.hasText(remoteAddress, "'remoteAddress' must not be null or blank"); + this.remoteAddress = remoteAddress; + return this; + } + /** * An extension point for further initialization of {@link MockHttpServletRequest} * in ways not built directly into the {@code MockHttpServletRequestBuilder}. @@ -583,6 +597,9 @@ public class MockHttpServletRequestBuilder if (this.session == null) { this.session = parentBuilder.session; } + if (this.remoteAddress == null) { + this.remoteAddress = parentBuilder.remoteAddress; + } if (this.characterEncoding == null) { this.characterEncoding = parentBuilder.characterEncoding; @@ -687,6 +704,9 @@ public class MockHttpServletRequestBuilder if (this.principal != null) { request.setUserPrincipal(this.principal); } + if (this.remoteAddress != null) { + request.setRemoteAddr(this.remoteAddress); + } if (this.session != null) { request.setSession(this.session); } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java index d705d6082f9..97349142e93 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java @@ -559,6 +559,15 @@ class MockHttpServletRequestBuilderTests { assertThat(request.getUserPrincipal()).isEqualTo(user); } + @Test + void remoteAddress() { + String ip = "10.0.0.1"; + this.builder.remoteAddress(ip); + MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); + + assertThat(request.getRemoteAddr()).isEqualTo(ip); + } + @Test // SPR-12945 void mergeInvokesDefaultRequestPostProcessorFirst() { final String ATTR = "ATTR";