Access to request and response byte[] in WebTestClient
The WiretapConnector now decorated the ClientHttpRequest & Response in order to intercept and save the actual content written and read. The saved content is now incorporated in the diagnostic output but may be used for other purposes as well (e.g. REST Docs). Diagnostic information about an exchange has also been refactored similar to command line output from curl.
This commit is contained in:
@@ -23,8 +23,10 @@ import org.junit.Test;
|
||||
import org.springframework.http.CacheControl;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.mock.http.client.reactive.MockClientHttpRequest;
|
||||
import org.springframework.mock.http.client.reactive.MockClientHttpResponse;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
|
||||
import static junit.framework.TestCase.assertNotNull;
|
||||
@@ -146,15 +148,14 @@ public class HeaderAssertionsTests {
|
||||
|
||||
private HeaderAssertions headerAssertions(HttpHeaders responseHeaders) {
|
||||
|
||||
ClientResponse.Headers headers = mock(ClientResponse.Headers.class);
|
||||
when(headers.asHttpHeaders()).thenReturn(responseHeaders);
|
||||
|
||||
ClientResponse response = mock(ClientResponse.class);
|
||||
when(response.headers()).thenReturn(headers);
|
||||
|
||||
MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, URI.create("/"));
|
||||
ExchangeResult result = new ExchangeResult(request, response);
|
||||
MockClientHttpResponse response = new MockClientHttpResponse(HttpStatus.OK);
|
||||
response.getHeaders().putAll(responseHeaders);
|
||||
|
||||
WiretapClientHttpRequest wiretapRequest = new WiretapClientHttpRequest(request);
|
||||
WiretapClientHttpResponse wiretapResponse = new WiretapClientHttpResponse(response);
|
||||
|
||||
ExchangeResult result = new ExchangeResult(wiretapRequest, wiretapResponse);
|
||||
return new HeaderAssertions(result, mock(WebTestClient.ResponseSpec.class));
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.mock.http.client.reactive.MockClientHttpRequest;
|
||||
import org.springframework.mock.http.client.reactive.MockClientHttpResponse;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
@@ -162,17 +163,14 @@ public class StatusAssertionTests {
|
||||
|
||||
private StatusAssertions statusAssertions(HttpStatus status) {
|
||||
|
||||
ClientResponse.Headers headers = mock(ClientResponse.Headers.class);
|
||||
when(headers.asHttpHeaders()).thenReturn(new HttpHeaders());
|
||||
|
||||
ClientResponse response = mock(ClientResponse.class);
|
||||
when(response.statusCode()).thenReturn(status);
|
||||
when(response.headers()).thenReturn(headers);
|
||||
|
||||
MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, URI.create("/"));
|
||||
ExchangeResult result = new ExchangeResult(request, response);
|
||||
MockClientHttpResponse response = new MockClientHttpResponse(status);
|
||||
|
||||
return new StatusAssertions(result, mock(WebTestClient.ResponseSpec.class));
|
||||
WiretapClientHttpRequest wiretapRequest = new WiretapClientHttpRequest(request);
|
||||
WiretapClientHttpResponse wiretapResponse = new WiretapClientHttpResponse(response);
|
||||
|
||||
ExchangeResult exchangeResult = new ExchangeResult(wiretapRequest, wiretapResponse);
|
||||
return new StatusAssertions(exchangeResult, mock(WebTestClient.ResponseSpec.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link WebTestClientConnector}.
|
||||
* Unit tests for {@link WiretapConnector}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
@@ -50,16 +50,16 @@ public class WebTestClientConnectorTests {
|
||||
ClientHttpConnector connector = (method, uri, fn) -> fn.apply(request).then(Mono.just(response));
|
||||
|
||||
ClientRequest clientRequest = ClientRequest.method(HttpMethod.GET, URI.create("/test"))
|
||||
.header(WebTestClientConnector.REQUEST_ID_HEADER_NAME, "1").build();
|
||||
.header(WiretapConnector.REQUEST_ID_HEADER_NAME, "1").build();
|
||||
|
||||
WebTestClientConnector webTestClientConnector = new WebTestClientConnector(connector);
|
||||
ExchangeFunction function = ExchangeFunctions.create(webTestClientConnector);
|
||||
WiretapConnector wiretapConnector = new WiretapConnector(connector);
|
||||
ExchangeFunction function = ExchangeFunctions.create(wiretapConnector);
|
||||
function.exchange(clientRequest).blockMillis(0);
|
||||
|
||||
ClientHttpRequest actual = webTestClientConnector.claimRequest("1");
|
||||
ExchangeResult actual = wiretapConnector.claimRequest("1");
|
||||
assertNotNull(actual);
|
||||
assertEquals(HttpMethod.GET, actual.getMethod());
|
||||
assertEquals("/test", actual.getURI().toString());
|
||||
assertEquals("/test", actual.getUrl().toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user