@Test public void transformsBody() throws ExecutionException, InterruptedException { Buffer buffer = new Buffer("I'm going to get removed.", UTF_8); LiveHttpResponse response = response(NO_CONTENT) .body(new ByteStream(Flux.just(buffer))) .build(); HttpResponse fullResponse = Mono.from(response.newBuilder() .body(ByteStream::drop) .build() .aggregate(1000)).block(); assertThat(fullResponse.body().length, is(0)); assertThat(buffer.delegate().refCnt(), is(0)); }
@Test public void transformerReplacesBody() { Buffer buf1 = new Buffer("chunk 1, ", UTF_8); Buffer buf2 = new Buffer("chunk 2.", UTF_8); LiveHttpResponse response1 = response(NO_CONTENT) .body(new ByteStream(Flux.just(buf1, buf2))) .build() .newBuilder() .body(body -> body.replaceWith(ByteStream.from("replacement", UTF_8))) .build(); HttpResponse response2 = Mono.from(response1.aggregate(100)).block(); assertEquals(response2.bodyAs(UTF_8), "replacement"); assertEquals(buf1.delegate().refCnt(), 0); assertEquals(buf2.delegate().refCnt(), 0); }
public static LiveHttpResponse doOnCancel(LiveHttpResponse response, Runnable action) { return response.newBuilder().body(it -> it.doOnCancel(action)).build(); }
public static LiveHttpResponse doOnComplete(LiveHttpResponse response, Runnable action) { return response.newBuilder() .body(it -> it.doOnEnd(ifSuccessful(action))) .build(); }
public static LiveHttpResponse doOnError(LiveHttpResponse response, Consumer<Throwable> action) { return response.newBuilder() .body(it -> it.doOnEnd(ifError(action))) .build(); }
public static LiveHttpResponse doFinally(LiveHttpResponse response, Consumer<Optional<Throwable>> action) { return response.newBuilder() .body(it -> it.doOnEnd(action::accept)) .build(); }