Decouple ExchangeResult from WiretapRequest/Response

This commit decouples ExchangeResult from knowledge about
WiretapClientHttpRequest/Response both of which are now private to
WiretapConnector.

ExchangeResult takes ClientHttpRequest/Response instead along with
promises for the serialized request and response content in the form
of MonoProcessor<byte[]>.

This sets up the possibility for an ExchangeResult to be created
outside and independent of WebTestClient, should we decide to make its
constructor public.

Issue: SPR-16101
This commit is contained in:
Rossen Stoyanchev
2017-10-25 17:26:36 -04:00
parent 7e8c8f0b76
commit a982123ed5
9 changed files with 220 additions and 238 deletions

View File

@@ -20,6 +20,7 @@ import java.net.URI;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import reactor.core.publisher.MonoProcessor;
import org.springframework.http.CacheControl;
import org.springframework.http.HttpHeaders;
@@ -148,15 +149,14 @@ public class HeaderAssertionsTests {
}
private HeaderAssertions headerAssertions(HttpHeaders responseHeaders) {
MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, URI.create("/"));
MockClientHttpResponse response = new MockClientHttpResponse(HttpStatus.OK);
response.getHeaders().putAll(responseHeaders);
WiretapClientHttpRequest wiretapRequest = new WiretapClientHttpRequest(request);
WiretapClientHttpResponse wiretapResponse = new WiretapClientHttpResponse(response);
MonoProcessor<byte[]> emptyContent = MonoProcessor.create();
emptyContent.onComplete();
ExchangeResult result = new ExchangeResult(wiretapRequest, wiretapResponse);
ExchangeResult result = new ExchangeResult(request, response, emptyContent, emptyContent, null);
return new HeaderAssertions(result, mock(WebTestClient.ResponseSpec.class));
}

View File

@@ -19,6 +19,7 @@ package org.springframework.test.web.reactive.server;
import java.net.URI;
import org.junit.Test;
import reactor.core.publisher.MonoProcessor;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@@ -161,15 +162,14 @@ public class StatusAssertionTests {
private StatusAssertions statusAssertions(HttpStatus status) {
MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, URI.create("/"));
MockClientHttpResponse response = new MockClientHttpResponse(status);
WiretapClientHttpRequest wiretapRequest = new WiretapClientHttpRequest(request);
WiretapClientHttpResponse wiretapResponse = new WiretapClientHttpResponse(response);
MonoProcessor<byte[]> emptyContent = MonoProcessor.create();
emptyContent.onComplete();
ExchangeResult exchangeResult = new ExchangeResult(wiretapRequest, wiretapResponse);
return new StatusAssertions(exchangeResult, mock(WebTestClient.ResponseSpec.class));
ExchangeResult result = new ExchangeResult(request, response, emptyContent, emptyContent, null);
return new StatusAssertions(result, mock(WebTestClient.ResponseSpec.class));
}
}

View File

@@ -32,8 +32,8 @@ import org.springframework.web.reactive.function.client.ClientRequest;
import org.springframework.web.reactive.function.client.ExchangeFunction;
import org.springframework.web.reactive.function.client.ExchangeFunctions;
import static java.time.Duration.*;
import static org.junit.Assert.*;
import static java.time.Duration.ofMillis;
import static org.junit.Assert.assertEquals;
/**
* Unit tests for {@link WiretapConnector}.
@@ -56,10 +56,10 @@ public class WebTestClientConnectorTests {
ExchangeFunction function = ExchangeFunctions.create(wiretapConnector);
function.exchange(clientRequest).block(ofMillis(0));
ExchangeResult actual = wiretapConnector.claimRequest("1");
assertNotNull(actual);
assertEquals(HttpMethod.GET, actual.getMethod());
assertEquals("/test", actual.getUrl().toString());
WiretapConnector.Info actual = wiretapConnector.claimRequest("1");
ExchangeResult result = actual.createExchangeResult(null);
assertEquals(HttpMethod.GET, result.getMethod());
assertEquals("/test", result.getUrl().toString());
}
}

View File

@@ -40,7 +40,8 @@ import org.springframework.web.bind.annotation.RestController;
import static java.time.Duration.ofMillis;
import static org.hamcrest.CoreMatchers.endsWith;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.springframework.http.MediaType.TEXT_EVENT_STREAM;
/**