Search in sources :

Example 1 with ByteBufFlux

use of reactor.netty.ByteBufFlux in project reactor-netty by reactor.

the class HttpServerTests method httpPipelining.

@Test
void httpPipelining() throws Exception {
    AtomicInteger i = new AtomicInteger();
    disposableServer = createServer().handle((req, resp) -> resp.header(HttpHeaderNames.CONTENT_LENGTH, "1").sendString(Mono.just(i.incrementAndGet()).flatMap(d -> Mono.delay(Duration.ofSeconds(4 - d)).map(x -> d + "\n")))).bindNow();
    DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/plaintext");
    CountDownLatch latch = new CountDownLatch(6);
    Connection client = TcpClient.create().port(disposableServer.port()).handle((in, out) -> {
        in.withConnection(x -> x.addHandlerFirst(new HttpClientCodec())).receiveObject().ofType(DefaultHttpContent.class).as(ByteBufFlux::fromInbound).asString().log().map(Integer::parseInt).subscribe(d -> {
            for (int x = 0; x < d; x++) {
                latch.countDown();
            }
        });
        return out.sendObject(Flux.just(request.retain(), request.retain(), request.retain())).neverComplete();
    }).wiretap(true).connectNow();
    assertThat(latch.await(45, TimeUnit.SECONDS)).as("latch await").isTrue();
    client.disposeNow();
}
Also used : AttributeKey(io.netty.util.AttributeKey) HttpHeaders(io.netty.handler.codec.http.HttpHeaders) StepVerifier(reactor.test.StepVerifier) SNIHostName(javax.net.ssl.SNIHostName) AbortedException(reactor.netty.channel.AbortedException) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) ChannelInboundHandlerAdapter(io.netty.channel.ChannelInboundHandlerAdapter) HttpMessage(io.netty.handler.codec.http.HttpMessage) ByteBufHolder(io.netty.buffer.ByteBufHolder) HttpClientCodec(io.netty.handler.codec.http.HttpClientCodec) TcpClient(reactor.netty.tcp.TcpClient) ConnectionObserver(reactor.netty.ConnectionObserver) Future(java.util.concurrent.Future) DomainSocketAddress(io.netty.channel.unix.DomainSocketAddress) BeforeAll(org.junit.jupiter.api.BeforeAll) Duration(java.time.Duration) DEFAULT_FORM_DECODER_SPEC(reactor.netty.http.server.HttpServerFormDecoderProvider.DEFAULT_FORM_DECODER_SPEC) Path(java.nio.file.Path) LoopResources(reactor.netty.resources.LoopResources) HttpObjectDecoder(io.netty.handler.codec.http.HttpObjectDecoder) HttpRequest(io.netty.handler.codec.http.HttpRequest) Context(reactor.util.context.Context) Executors(java.util.concurrent.Executors) CountDownLatch(java.util.concurrent.CountDownLatch) LineBasedFrameDecoder(io.netty.handler.codec.LineBasedFrameDecoder) Assertions.fail(org.assertj.core.api.Assertions.fail) NettyOutbound(reactor.netty.NettyOutbound) ReferenceCountUtil(io.netty.util.ReferenceCountUtil) GZIPOutputStream(java.util.zip.GZIPOutputStream) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) HttpClient(reactor.netty.http.client.HttpClient) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ChannelOption(io.netty.channel.ChannelOption) HttpProtocol(reactor.netty.http.HttpProtocol) Nullable(reactor.util.annotation.Nullable) ArrayList(java.util.ArrayList) InsecureTrustManagerFactory(io.netty.handler.ssl.util.InsecureTrustManagerFactory) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) ValueSource(org.junit.jupiter.params.provider.ValueSource) PrematureCloseException(reactor.netty.http.client.PrematureCloseException) SslContext(io.netty.handler.ssl.SslContext) Publisher(org.reactivestreams.Publisher) IOException(java.io.IOException) Mono(reactor.core.publisher.Mono) Field(java.lang.reflect.Field) ReferenceCounted(io.netty.util.ReferenceCounted) Channel(io.netty.channel.Channel) DefaultHttpContent(io.netty.handler.codec.http.DefaultHttpContent) DefaultEventExecutor(io.netty.util.concurrent.DefaultEventExecutor) Flux(reactor.core.publisher.Flux) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) FutureMono(reactor.netty.FutureMono) Paths(java.nio.file.Paths) SslContextBuilder(io.netty.handler.ssl.SslContextBuilder) HttpHeaderNames(io.netty.handler.codec.http.HttpHeaderNames) ConnectionProvider(reactor.netty.resources.ConnectionProvider) ServerCookieEncoder(io.netty.handler.codec.http.cookie.ServerCookieEncoder) HttpUtil(io.netty.handler.codec.http.HttpUtil) SocketAddress(java.net.SocketAddress) Http11SslContextSpec(reactor.netty.http.Http11SslContextSpec) DefaultFullHttpRequest(io.netty.handler.codec.http.DefaultFullHttpRequest) ByteBufAllocator(io.netty.buffer.ByteBufAllocator) URISyntaxException(java.net.URISyntaxException) BiFunction(java.util.function.BiFunction) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Http2SslContextSpec(reactor.netty.http.Http2SslContextSpec) TimeoutException(java.util.concurrent.TimeoutException) BaseHttpTest(reactor.netty.BaseHttpTest) Random(java.util.Random) Unpooled(io.netty.buffer.Unpooled) GlobalEventExecutor(io.netty.util.concurrent.GlobalEventExecutor) DefaultHttpRequest(io.netty.handler.codec.http.DefaultHttpRequest) TransportConfig(reactor.netty.transport.TransportConfig) ServerCookieDecoder(io.netty.handler.codec.http.cookie.ServerCookieDecoder) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ByteBufFlux(reactor.netty.ByteBufFlux) NettyPipeline(reactor.netty.NettyPipeline) MethodSource(org.junit.jupiter.params.provider.MethodSource) ChannelGroup(io.netty.channel.group.ChannelGroup) HttpResponseStatus(io.netty.handler.codec.http.HttpResponseStatus) SignalType(reactor.core.publisher.SignalType) InetSocketAddress(java.net.InetSocketAddress) Collectors(java.util.stream.Collectors) ChannelBindException(reactor.netty.ChannelBindException) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) List(java.util.List) DisposableServer(reactor.netty.DisposableServer) HttpVersion(io.netty.handler.codec.http.HttpVersion) Tuple3(reactor.util.function.Tuple3) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) WebSocketCloseStatus(io.netty.handler.codec.http.websocketx.WebSocketCloseStatus) Tuple2(reactor.util.function.Tuple2) HttpClientRequest(reactor.netty.http.client.HttpClientRequest) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) SniCompletionEvent(io.netty.handler.ssl.SniCompletionEvent) Charset(java.nio.charset.Charset) ByteBuf(io.netty.buffer.ByteBuf) Connection(reactor.netty.Connection) ExecutorService(java.util.concurrent.ExecutorService) HttpHeaderValues(io.netty.handler.codec.http.HttpHeaderValues) Assumptions.assumeThat(org.assertj.core.api.Assumptions.assumeThat) SelfSignedCertificate(io.netty.handler.ssl.util.SelfSignedCertificate) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) HttpMethod(io.netty.handler.codec.http.HttpMethod) CertificateException(java.security.cert.CertificateException) TimeUnit(java.util.concurrent.TimeUnit) HttpServerCodec(io.netty.handler.codec.http.HttpServerCodec) FullHttpResponse(io.netty.handler.codec.http.FullHttpResponse) TcpServer(reactor.netty.tcp.TcpServer) HttpContentDecompressor(io.netty.handler.codec.http.HttpContentDecompressor) Comparator(java.util.Comparator) Timeout(org.junit.jupiter.api.Timeout) ByteBufFlux(reactor.netty.ByteBufFlux) DefaultFullHttpRequest(io.netty.handler.codec.http.DefaultFullHttpRequest) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Connection(reactor.netty.Connection) DefaultHttpContent(io.netty.handler.codec.http.DefaultHttpContent) CountDownLatch(java.util.concurrent.CountDownLatch) HttpClientCodec(io.netty.handler.codec.http.HttpClientCodec) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) BaseHttpTest(reactor.netty.BaseHttpTest) Test(org.junit.jupiter.api.Test)

Example 2 with ByteBufFlux

use of reactor.netty.ByteBufFlux in project reactor-netty by reactor.

the class HttpClientTest method backpressured.

@Test
void backpressured() throws Exception {
    Path resource = Paths.get(getClass().getResource("/public").toURI());
    disposableServer = createServer().route(routes -> routes.directory("/test", resource)).bindNow();
    ByteBufFlux remote = createHttpClientForContextWithPort().get().uri("/test/test.css").responseContent();
    Mono<String> page = remote.asString().limitRate(1).reduce(String::concat);
    Mono<String> cancelledPage = remote.asString().take(5).limitRate(1).reduce(String::concat);
    page.block(Duration.ofSeconds(30));
    cancelledPage.block(Duration.ofSeconds(30));
    page.block(Duration.ofSeconds(30));
}
Also used : Path(java.nio.file.Path) ByteBufFlux(reactor.netty.ByteBufFlux) BaseHttpTest(reactor.netty.BaseHttpTest) Test(org.junit.jupiter.api.Test)

Example 3 with ByteBufFlux

use of reactor.netty.ByteBufFlux in project reactor-netty by reactor.

the class ChannelOperationsHandlerTest method testChannelInactiveThrowsIOException.

// @Test
// public void keepPrefetchSizeConstantEqualsWriteBufferLowHighWaterMark() {
// doTestPrefetchSize(1024, 1024);
// }
// 
// @Test
// public void keepPrefetchSizeConstantDifferentWriteBufferLowHighWaterMark() {
// doTestPrefetchSize(0, 1024);
// }
// 
// private void doTestPrefetchSize(int writeBufferLowWaterMark, int writeBufferHighWaterMark) {
// EmbeddedChannel channel = new EmbeddedChannel();
// channel.config()
// .setWriteBufferLowWaterMark(writeBufferLowWaterMark)
// .setWriteBufferHighWaterMark(writeBufferHighWaterMark);
// 
// StepVerifier.create(FutureMono.deferFuture(() -> channel.writeAndFlush(MonoSendMany.objectSource(Flux.range(0, 70), channel, null))))
// .expectComplete()
// .verify(Duration.ofSeconds(30));
// 
// }
@Test
void testChannelInactiveThrowsIOException() throws Exception {
    ExecutorService threadPool = Executors.newCachedThreadPool();
    int abortServerPort = SocketUtils.findAvailableTcpPort();
    ConnectionAbortServer abortServer = new ConnectionAbortServer(abortServerPort);
    Future<?> f = threadPool.submit(abortServer);
    if (!abortServer.await(10, TimeUnit.SECONDS)) {
        throw new IOException("Fail to start test server");
    }
    ByteBufFlux response = createClient(abortServerPort).request(HttpMethod.GET).uri("/").send((req, out) -> out.sendString(Flux.just("a", "b", "c"))).responseContent();
    StepVerifier.create(response.log()).expectError(IOException.class).verify();
    abortServer.close();
    assertThat(f.get()).isNull();
}
Also used : StepVerifier(reactor.test.StepVerifier) SocketUtils(reactor.netty.SocketUtils) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) BaseHttpTest(reactor.netty.BaseHttpTest) Nullable(reactor.util.annotation.Nullable) ByteBuffer(java.nio.ByteBuffer) Future(java.util.concurrent.Future) Loggers(reactor.util.Loggers) SocketChannel(java.nio.channels.SocketChannel) Charset(java.nio.charset.Charset) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ByteBufFlux(reactor.netty.ByteBufFlux) Duration(java.time.Duration) Logger(reactor.util.Logger) Schedulers(reactor.core.scheduler.Schedulers) ExecutorService(java.util.concurrent.ExecutorService) WriteTimeoutHandler(io.netty.handler.timeout.WriteTimeoutHandler) HttpMethod(io.netty.handler.codec.http.HttpMethod) IOException(java.io.IOException) Mono(reactor.core.publisher.Mono) InetSocketAddress(java.net.InetSocketAddress) Executors(java.util.concurrent.Executors) ServerSocketChannel(java.nio.channels.ServerSocketChannel) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) Flux(reactor.core.publisher.Flux) LineBasedFrameDecoder(io.netty.handler.codec.LineBasedFrameDecoder) ChannelHandler(io.netty.channel.ChannelHandler) HttpClient(reactor.netty.http.client.HttpClient) ByteBufFlux(reactor.netty.ByteBufFlux) ExecutorService(java.util.concurrent.ExecutorService) IOException(java.io.IOException) BaseHttpTest(reactor.netty.BaseHttpTest) Test(org.junit.jupiter.api.Test)

Aggregations

Test (org.junit.jupiter.api.Test)3 BaseHttpTest (reactor.netty.BaseHttpTest)3 ByteBufFlux (reactor.netty.ByteBufFlux)3 LineBasedFrameDecoder (io.netty.handler.codec.LineBasedFrameDecoder)2 HttpMethod (io.netty.handler.codec.http.HttpMethod)2 IOException (java.io.IOException)2 InetSocketAddress (java.net.InetSocketAddress)2 Charset (java.nio.charset.Charset)2 Path (java.nio.file.Path)2 Duration (java.time.Duration)2 CountDownLatch (java.util.concurrent.CountDownLatch)2 ExecutorService (java.util.concurrent.ExecutorService)2 Executors (java.util.concurrent.Executors)2 Future (java.util.concurrent.Future)2 TimeUnit (java.util.concurrent.TimeUnit)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)2 Flux (reactor.core.publisher.Flux)2 Mono (reactor.core.publisher.Mono)2 HttpClient (reactor.netty.http.client.HttpClient)2