/** * Creates a new {@code ByteStream} from String. * * @param content content * @param charset Character set encoding * @return ByteStream */ public static ByteStream from(String content, Charset charset) { return new ByteStream(Flux.just(new Buffer(content, charset))); }
/** * Creates a new {@code ByteStream} from byte array. * * @param content content * @return ByteStream */ public static ByteStream from(byte[] content) { return new ByteStream(Flux.just(new Buffer(Unpooled.copiedBuffer(content)))); }
private static LiveHttpResponse error(HttpResponseStatus status) { return new LiveHttpResponse.Builder(status) .body(new ByteStream(Flux.just(new Buffer(status.description(), UTF_8)))) .build(); }
@Test public void aggregatesManyBuffers() throws ExecutionException, InterruptedException { ByteStreamAggregator aggregator = new ByteStreamAggregator(Flux.just( new Buffer("x", UTF_8), new Buffer("y", UTF_8)), 100); Buffer a = aggregator.apply().get(); assertThat(a.size(), is(2)); assertThat(new String(a.content(), UTF_8), is("xy")); }
@Test public void requestDoOnCompleteDoesNotActivatesWhenErrors() { RuntimeException cause = new RuntimeException("help!!"); Requests.doOnComplete(request, () -> completed.set(Optional.empty())) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.error(cause); assertThat(completed.get(), is(nullValue())); }
@Test public void responseDoOnErrorActivatesWhenErrors() { RuntimeException cause = new RuntimeException("help!!"); Requests.doOnError(response, (it) -> completed.set(Optional.of(it))) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.error(cause); assertThat(completed.get(), is(Optional.of(cause))); } }
@Test public void responseDoOnErrorDoesNotActivatesWhenSuccessfullyCompleted() { Requests.doOnError(response, (cause) -> completed.set(Optional.of(cause))) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.complete(); assertThat(completed.get(), is(nullValue())); }
@Test public void requestDoOnErrorActivatesWhenErrors() { RuntimeException cause = new RuntimeException("help!!"); Requests.doOnError(request, (it) -> completed.set(Optional.of(it))) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.error(cause); assertThat(completed.get(), is(Optional.of(cause))); }
@Test public void responseDoFinallyActivatesWhenErrors() { RuntimeException cause = new RuntimeException("help!!"); Requests.doFinally(response, completed::set) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.error(cause); assertThat(completed.get(), is(Optional.of(cause))); }
Builder(HttpRequest request) { this.id = request.id(); this.method = request.method(); this.url = request.url(); this.version = request.version(); this.headers = request.headers().newBuilder(); this.body = new ByteStream(Flux.just(new Buffer(copiedBuffer(request.body())))); }
@Test public void requestDoOnCompleteActivatesWhenSuccessfullyCompleted() { Requests.doOnComplete(request, () -> completed.set(Optional.empty())) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.complete(); assertThat(completed.get(), is(Optional.empty())); }
@Test public void requestDoOnErrorDoesNotActivatesWhenSuccessfullyCompleted() { Requests.doOnError(request, (cause) -> completed.set(Optional.of(cause))) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.complete(); assertThat(completed.get(), is(nullValue())); }
@Test public void responseDoOnCompleteActivatesWhenSuccessfullyCompleted() { Requests.doOnComplete(response, () -> completed.set(Optional.empty())) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.complete(); assertThat(completed.get(), is(Optional.empty())); }
@Test public void requestDoFinallyActivatesWhenErrors() { RuntimeException cause = new RuntimeException("help!!"); Requests.doFinally(request, completed::set) .consume(); publisher.next(new Buffer("content", UTF_8)); assertThat(completed.get(), is(nullValue())); publisher.error(cause); assertThat(completed.get(), is(Optional.of(cause))); }
@Test public void aggregatesOneBuffer() throws ExecutionException, InterruptedException { ByteStreamAggregator aggregator = new ByteStreamAggregator(Flux.just(new Buffer("x", UTF_8)), 100); Buffer a = aggregator.apply().get(); assertThat(a.size(), is(1)); assertThat(new String(a.content(), UTF_8), is("x")); }
@Test(expectedExceptions = IllegalStateException.class) public void allowsOnlyOneAggregation() { Publisher<Buffer> upstream = Flux.just(new Buffer("x", UTF_8)); ByteStreamAggregator aggregator = new ByteStreamAggregator(upstream, 100); aggregator.apply(); aggregator.apply(); }
@Test public void toFullRequestReleasesOriginalReferenceCountedBuffers() throws ExecutionException, InterruptedException { Buffer content = new Buffer("original", UTF_8); LiveHttpRequest original = LiveHttpRequest.get("/foo") .body(new ByteStream(Flux.just(content))) .build(); HttpRequest fullRequest = Mono.from(original.aggregate(100)).block(); assertThat(content.delegate().refCnt(), is(0)); assertThat(fullRequest.bodyAs(UTF_8), is("original")); }
@Test public void consumesBody() { Buffer buf1 = new Buffer("foo", UTF_8); Buffer buf2 = new Buffer("bar", UTF_8); LiveHttpResponse response = response() .body(new ByteStream(Flux.just(buf1, buf2))) .build(); response.consume(); assertEquals(buf1.delegate().refCnt(), 0); assertEquals(buf2.delegate().refCnt(), 0); }
@Test public void toFullResponseReleasesOriginalRefCountedBuffers() throws ExecutionException, InterruptedException { Buffer content = new Buffer(Unpooled.copiedBuffer("original", UTF_8)); LiveHttpResponse original = LiveHttpResponse.response(OK) .body(new ByteStream(Flux.just(content))) .build(); StepVerifier.create(original.aggregate(100)) .expectNextCount(1) .then(() -> assertThat(content.delegate().refCnt(), is(0))) .verifyComplete(); }