Expose localAddress in WebFlux server

Closes gh-24174
This commit is contained in:
Rossen Stoyanchev
2019-12-10 15:10:13 +00:00
parent 2bd821c909
commit 1b172c1d20
14 changed files with 176 additions and 31 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ import org.springframework.web.util.UriComponentsBuilder;
* @author Rossen Stoyanchev
* @since 5.0
*/
public class MockServerHttpRequest extends AbstractServerHttpRequest {
public final class MockServerHttpRequest extends AbstractServerHttpRequest {
private final HttpMethod httpMethod;
@@ -61,6 +61,9 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
@Nullable
private final InetSocketAddress remoteAddress;
@Nullable
private final InetSocketAddress localAddress;
@Nullable
private final SslInfo sslInfo;
@@ -69,13 +72,14 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
private MockServerHttpRequest(HttpMethod httpMethod, URI uri, @Nullable String contextPath,
HttpHeaders headers, MultiValueMap<String, HttpCookie> cookies,
@Nullable InetSocketAddress remoteAddress, @Nullable SslInfo sslInfo,
Publisher<? extends DataBuffer> body) {
@Nullable InetSocketAddress remoteAddress, @Nullable InetSocketAddress localAddress,
@Nullable SslInfo sslInfo, Publisher<? extends DataBuffer> body) {
super(uri, contextPath, headers);
this.httpMethod = httpMethod;
this.cookies = cookies;
this.remoteAddress = remoteAddress;
this.localAddress = localAddress;
this.sslInfo = sslInfo;
this.body = Flux.from(body);
}
@@ -97,6 +101,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
return this.remoteAddress;
}
@Nullable
@Override
public InetSocketAddress getLocalAddress() {
return this.localAddress;
}
@Nullable
@Override
protected SslInfo initSslInfo() {
@@ -254,6 +264,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
*/
B remoteAddress(InetSocketAddress remoteAddress);
/**
* Set the local address to return.
* @since 5.2.3
*/
B localAddress(InetSocketAddress localAddress);
/**
* Set SSL session information and certificates.
*/
@@ -408,6 +424,9 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
@Nullable
private InetSocketAddress remoteAddress;
@Nullable
private InetSocketAddress localAddress;
@Nullable
private SslInfo sslInfo;
@@ -441,6 +460,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
return this;
}
@Override
public BodyBuilder localAddress(InetSocketAddress localAddress) {
this.localAddress = localAddress;
return this;
}
@Override
public void sslInfo(SslInfo sslInfo) {
this.sslInfo = sslInfo;
@@ -545,7 +570,7 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
public MockServerHttpRequest body(Publisher<? extends DataBuffer> body) {
applyCookiesIfNecessary();
return new MockServerHttpRequest(this.method, getUrlToUse(), this.contextPath,
this.headers, this.cookies, this.remoteAddress, this.sslInfo, body);
this.headers, this.cookies, this.remoteAddress, this.localAddress, this.sslInfo, body);
}
private void applyCookiesIfNecessary() {