@Override public void onNext(Buffer part) { long newSize = aggregated.readableBytes() + part.size(); if (newSize > maxSize) { part.delegate().release(); aggregated.release(); subscription.cancel(); this.future.completeExceptionally( new ContentOverflowException(format("Maximum content size exceeded. Maximum size allowed is %d bytes.", maxSize))); } else { aggregated.addComponent(part.delegate()); aggregated.writerIndex(aggregated.writerIndex() + part.size()); } }
@Test public void aggregatesZeroBuffers() throws ExecutionException, InterruptedException { ByteStreamAggregator aggregator = new ByteStreamAggregator(Flux.empty(), 100); Buffer a = aggregator.apply().get(); assertThat(a.size(), is(0)); assertThat(new String(a.content(), UTF_8), is("")); }
@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 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")); }