Polishing and minor refactoring

See gh-25884
This commit is contained in:
Rossen Stoyanchev
2020-10-12 11:32:48 +01:00
parent 66138f0dce
commit 5b1b20c8c0
12 changed files with 56 additions and 59 deletions

View File

@@ -65,11 +65,8 @@ public class MockServerHttpResponse extends AbstractServerHttpResponse {
this.writeHandler = body -> {
// Avoid .then() that causes data buffers to be discarded and released
Sinks.Empty<Void> completion = Sinks.unsafe().empty();
this.body = body
.doOnComplete(completion::tryEmitEmpty) // Ignore error: cached + serialized
.doOnError(completion::tryEmitError)
.cache();
this.body.subscribe();
this.body = body.cache();
this.body.subscribe(aVoid -> {}, completion::tryEmitError, completion::tryEmitEmpty); // Signals are serialized
return completion.asMono();
};
}

View File

@@ -83,8 +83,9 @@ public class HttpHandlerConnector implements ClientHttpConnector {
private Mono<ClientHttpResponse> doConnect(
HttpMethod httpMethod, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
Sinks.Empty<Void> requestWriteCompletion = Sinks.empty();
Sinks.Empty<Void> handlerCompletion = Sinks.empty();
// unsafe(): we're intercepting, already serialized Publisher signals
Sinks.Empty<Void> requestWriteSink = Sinks.unsafe().empty();
Sinks.Empty<Void> handlerSink = Sinks.unsafe().empty();
ClientHttpResponse[] savedResponse = new ClientHttpResponse[1];
MockClientHttpRequest mockClientRequest = new MockClientHttpRequest(httpMethod, uri);
@@ -96,8 +97,8 @@ public class HttpHandlerConnector implements ClientHttpConnector {
ServerHttpResponse responseToUse = prepareResponse(mockServerResponse, mockServerRequest);
this.handler.handle(mockServerRequest, responseToUse).subscribe(
aVoid -> {},
handlerCompletion::tryEmitError, // Ignore error: cached + serialized
handlerCompletion::tryEmitEmpty);
handlerSink::tryEmitError, // Ignore result: signals cannot compete
handlerSink::tryEmitEmpty);
return Mono.empty();
});
@@ -110,10 +111,10 @@ public class HttpHandlerConnector implements ClientHttpConnector {
log("Writing client request for ", httpMethod, uri);
requestCallback.apply(mockClientRequest).subscribe(
aVoid -> {},
requestWriteCompletion::tryEmitError, // Ignore error: cached + serialized
requestWriteCompletion::tryEmitEmpty);
requestWriteSink::tryEmitError, // Ignore result: signals cannot compete
requestWriteSink::tryEmitEmpty);
return Mono.when(requestWriteCompletion.asMono(), handlerCompletion.asMono())
return Mono.when(requestWriteSink.asMono(), handlerSink.asMono())
.onErrorMap(ex -> {
ClientHttpResponse response = savedResponse[0];
return response != null ? new FailureAfterResponseCompletedException(response, ex) : ex;

View File

@@ -168,7 +168,6 @@ class WiretapConnector implements ClientHttpConnector {
.doOnComplete(this::handleOnComplete) : null;
if (publisher == null && publisherNested == null) {
// Ignore result: OK or not relevant
this.content.tryEmitEmpty();
}
}
@@ -206,14 +205,14 @@ class WiretapConnector implements ClientHttpConnector {
private void handleOnError(Throwable ex) {
// Ignore result: OK or not relevant
// Ignore result: signals cannot compete
this.content.tryEmitError(ex);
}
private void handleOnComplete() {
byte[] bytes = new byte[this.buffer.readableByteCount()];
this.buffer.read(bytes);
// Ignore result: OK or not relevant
// Ignore result: signals cannot compete
this.content.tryEmitValue(bytes);
}
}