|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2019 the original author or authors. |
|
|
|
* Copyright 2002-2020 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -40,6 +40,7 @@ import org.springframework.http.MediaType; |
|
|
|
import org.springframework.http.server.reactive.AbstractServerHttpRequest; |
|
|
|
import org.springframework.http.server.reactive.AbstractServerHttpRequest; |
|
|
|
import org.springframework.http.server.reactive.SslInfo; |
|
|
|
import org.springframework.http.server.reactive.SslInfo; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
|
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.LinkedMultiValueMap; |
|
|
|
import org.springframework.util.LinkedMultiValueMap; |
|
|
|
import org.springframework.util.MimeType; |
|
|
|
import org.springframework.util.MimeType; |
|
|
|
import org.springframework.util.MultiValueMap; |
|
|
|
import org.springframework.util.MultiValueMap; |
|
|
|
@ -54,8 +55,12 @@ import org.springframework.web.util.UriComponentsBuilder; |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
private final HttpMethod httpMethod; |
|
|
|
private final HttpMethod httpMethod; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
|
|
|
|
private final String customHttpMethod; |
|
|
|
|
|
|
|
|
|
|
|
private final MultiValueMap<String, HttpCookie> cookies; |
|
|
|
private final MultiValueMap<String, HttpCookie> cookies; |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
@ -70,13 +75,15 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
private final Flux<DataBuffer> body; |
|
|
|
private final Flux<DataBuffer> body; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MockServerHttpRequest(HttpMethod httpMethod, URI uri, @Nullable String contextPath, |
|
|
|
private MockServerHttpRequest(@Nullable HttpMethod httpMethod, @Nullable String customHttpMethod, |
|
|
|
HttpHeaders headers, MultiValueMap<String, HttpCookie> cookies, |
|
|
|
URI uri, @Nullable String contextPath, HttpHeaders headers, MultiValueMap<String, HttpCookie> cookies, |
|
|
|
@Nullable InetSocketAddress remoteAddress, @Nullable InetSocketAddress localAddress, |
|
|
|
@Nullable InetSocketAddress remoteAddress, @Nullable InetSocketAddress localAddress, |
|
|
|
@Nullable SslInfo sslInfo, Publisher<? extends DataBuffer> body) { |
|
|
|
@Nullable SslInfo sslInfo, Publisher<? extends DataBuffer> body) { |
|
|
|
|
|
|
|
|
|
|
|
super(uri, contextPath, headers); |
|
|
|
super(uri, contextPath, headers); |
|
|
|
|
|
|
|
Assert.isTrue(httpMethod != null || customHttpMethod != null, "HTTP method must not be null"); |
|
|
|
this.httpMethod = httpMethod; |
|
|
|
this.httpMethod = httpMethod; |
|
|
|
|
|
|
|
this.customHttpMethod = customHttpMethod; |
|
|
|
this.cookies = cookies; |
|
|
|
this.cookies = cookies; |
|
|
|
this.remoteAddress = remoteAddress; |
|
|
|
this.remoteAddress = remoteAddress; |
|
|
|
this.localAddress = localAddress; |
|
|
|
this.localAddress = localAddress; |
|
|
|
@ -91,8 +98,9 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
|
|
|
|
@SuppressWarnings("ConstantConditions") |
|
|
|
public String getMethodValue() { |
|
|
|
public String getMethodValue() { |
|
|
|
return this.httpMethod.name(); |
|
|
|
return (this.httpMethod != null ? this.httpMethod.name() : this.customHttpMethod); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@ -131,30 +139,6 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
|
|
|
|
|
|
|
|
// Static builder methods
|
|
|
|
// Static builder methods
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a builder with the given HTTP method and a {@link URI}. |
|
|
|
|
|
|
|
* @param method the HTTP method (GET, POST, etc) |
|
|
|
|
|
|
|
* @param url the URL |
|
|
|
|
|
|
|
* @return the created builder |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public static BodyBuilder method(HttpMethod method, URI url) { |
|
|
|
|
|
|
|
return new DefaultBodyBuilder(method, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Alternative to {@link #method(HttpMethod, URI)} that accepts a URI template. |
|
|
|
|
|
|
|
* The given URI may contain query parameters, or those may be added later via |
|
|
|
|
|
|
|
* {@link BaseBuilder#queryParam queryParam} builder methods. |
|
|
|
|
|
|
|
* @param method the HTTP method (GET, POST, etc) |
|
|
|
|
|
|
|
* @param urlTemplate the URL template |
|
|
|
|
|
|
|
* @param vars variables to expand into the template |
|
|
|
|
|
|
|
* @return the created builder |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public static BodyBuilder method(HttpMethod method, String urlTemplate, Object... vars) { |
|
|
|
|
|
|
|
URI url = UriComponentsBuilder.fromUriString(urlTemplate).buildAndExpand(vars).encode().toUri(); |
|
|
|
|
|
|
|
return new DefaultBodyBuilder(method, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Create an HTTP GET builder with the given URI template. The given URI may |
|
|
|
* Create an HTTP GET builder with the given URI template. The given URI may |
|
|
|
* contain query parameters, or those may be added later via |
|
|
|
* contain query parameters, or those may be added later via |
|
|
|
@ -228,6 +212,44 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
return method(HttpMethod.OPTIONS, urlTemplate, uriVars); |
|
|
|
return method(HttpMethod.OPTIONS, urlTemplate, uriVars); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a builder with the given HTTP method and a {@link URI}. |
|
|
|
|
|
|
|
* @param method the HTTP method (GET, POST, etc) |
|
|
|
|
|
|
|
* @param url the URL |
|
|
|
|
|
|
|
* @return the created builder |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public static BodyBuilder method(HttpMethod method, URI url) { |
|
|
|
|
|
|
|
return new DefaultBodyBuilder(method, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Alternative to {@link #method(HttpMethod, URI)} that accepts a URI template. |
|
|
|
|
|
|
|
* The given URI may contain query parameters, or those may be added later via |
|
|
|
|
|
|
|
* {@link BaseBuilder#queryParam queryParam} builder methods. |
|
|
|
|
|
|
|
* @param method the HTTP method (GET, POST, etc) |
|
|
|
|
|
|
|
* @param urlTemplate the URL template |
|
|
|
|
|
|
|
* @param vars variables to expand into the template |
|
|
|
|
|
|
|
* @return the created builder |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public static BodyBuilder method(HttpMethod method, String urlTemplate, Object... vars) { |
|
|
|
|
|
|
|
URI url = UriComponentsBuilder.fromUriString(urlTemplate).buildAndExpand(vars).encode().toUri(); |
|
|
|
|
|
|
|
return new DefaultBodyBuilder(method, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a builder with a raw HTTP method value that is outside the range |
|
|
|
|
|
|
|
* of {@link HttpMethod} enum values. |
|
|
|
|
|
|
|
* @param method the HTTP method value |
|
|
|
|
|
|
|
* @param urlTemplate the URL template |
|
|
|
|
|
|
|
* @param vars variables to expand into the template |
|
|
|
|
|
|
|
* @return the created builder |
|
|
|
|
|
|
|
* @since 5.2.7 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public static BodyBuilder method(String method, String urlTemplate, Object... vars) { |
|
|
|
|
|
|
|
URI url = UriComponentsBuilder.fromUriString(urlTemplate).buildAndExpand(vars).encode().toUri(); |
|
|
|
|
|
|
|
return new DefaultBodyBuilder(method, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Request builder exposing properties not related to the body. |
|
|
|
* Request builder exposing properties not related to the body. |
|
|
|
@ -408,8 +430,12 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
private static final DataBufferFactory BUFFER_FACTORY = new DefaultDataBufferFactory(); |
|
|
|
private static final DataBufferFactory BUFFER_FACTORY = new DefaultDataBufferFactory(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
private final HttpMethod method; |
|
|
|
private final HttpMethod method; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
|
|
|
|
private final String customMethod; |
|
|
|
|
|
|
|
|
|
|
|
private final URI url; |
|
|
|
private final URI url; |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
@ -431,8 +457,22 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
private SslInfo sslInfo; |
|
|
|
private SslInfo sslInfo; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public DefaultBodyBuilder(HttpMethod method, URI url) { |
|
|
|
DefaultBodyBuilder(HttpMethod method, URI url) { |
|
|
|
this.method = method; |
|
|
|
this.method = method; |
|
|
|
|
|
|
|
this.customMethod = null; |
|
|
|
|
|
|
|
this.url = url; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DefaultBodyBuilder(String method, URI url) { |
|
|
|
|
|
|
|
HttpMethod resolved = HttpMethod.resolve(method); |
|
|
|
|
|
|
|
if (resolved != null) { |
|
|
|
|
|
|
|
this.method = resolved; |
|
|
|
|
|
|
|
this.customMethod = null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
this.method = null; |
|
|
|
|
|
|
|
this.customMethod = method; |
|
|
|
|
|
|
|
} |
|
|
|
this.url = url; |
|
|
|
this.url = url; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -569,7 +609,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public MockServerHttpRequest body(Publisher<? extends DataBuffer> body) { |
|
|
|
public MockServerHttpRequest body(Publisher<? extends DataBuffer> body) { |
|
|
|
applyCookiesIfNecessary(); |
|
|
|
applyCookiesIfNecessary(); |
|
|
|
return new MockServerHttpRequest(this.method, getUrlToUse(), this.contextPath, |
|
|
|
return new MockServerHttpRequest(this.method, this.customMethod, getUrlToUse(), this.contextPath, |
|
|
|
this.headers, this.cookies, this.remoteAddress, this.localAddress, this.sslInfo, body); |
|
|
|
this.headers, this.cookies, this.remoteAddress, this.localAddress, this.sslInfo, body); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|