Search in sources :

Example 6 with DefaultEventExecutor

use of io.netty.util.concurrent.DefaultEventExecutor in project reactor-netty by reactor.

the class HttpClientTest method testChannelGroupClosesAllConnections.

@Test
void testChannelGroupClosesAllConnections() throws Exception {
    disposableServer = createServer().route(r -> r.get("/never", (req, res) -> res.sendString(Mono.never())).get("/delay10", (req, res) -> res.sendString(Mono.just("test").delayElement(Duration.ofSeconds(10)))).get("/delay1", (req, res) -> res.sendString(Mono.just("test").delayElement(Duration.ofSeconds(1))))).bindNow(Duration.ofSeconds(30));
    ConnectionProvider connectionProvider = ConnectionProvider.create("testChannelGroupClosesAllConnections", Integer.MAX_VALUE);
    ChannelGroup group = new DefaultChannelGroup(new DefaultEventExecutor());
    CountDownLatch latch1 = new CountDownLatch(3);
    CountDownLatch latch2 = new CountDownLatch(3);
    HttpClient client = createHttpClientForContextWithAddress(connectionProvider);
    Flux.just("/never", "/delay10", "/delay1").flatMap(s -> client.doOnConnected(c -> {
        c.onDispose().subscribe(null, null, latch2::countDown);
        group.add(c.channel());
        latch1.countDown();
    }).get().uri(s).responseContent().aggregate().asString()).subscribe();
    assertThat(latch1.await(30, TimeUnit.SECONDS)).isTrue();
    Mono.whenDelayError(FutureMono.from(group.close()), connectionProvider.disposeLater()).block(Duration.ofSeconds(30));
    assertThat(latch2.await(30, TimeUnit.SECONDS)).isTrue();
}
Also used : Arrays(java.util.Arrays) HttpHeaders(io.netty.handler.codec.http.HttpHeaders) StepVerifier(reactor.test.StepVerifier) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) Tuples(reactor.util.function.Tuples) Disabled(org.junit.jupiter.api.Disabled) HttpClientCodec(io.netty.handler.codec.http.HttpClientCodec) HttpResources(reactor.netty.http.HttpResources) TcpClient(reactor.netty.tcp.TcpClient) Future(java.util.concurrent.Future) Loggers(reactor.util.Loggers) DomainSocketAddress(io.netty.channel.unix.DomainSocketAddress) BeforeAll(org.junit.jupiter.api.BeforeAll) Duration(java.time.Duration) CharsetUtil(io.netty.util.CharsetUtil) Path(java.nio.file.Path) LoopResources(reactor.netty.resources.LoopResources) HttpObjectDecoder(io.netty.handler.codec.http.HttpObjectDecoder) Context(reactor.util.context.Context) Set(java.util.Set) ConnectionPoolMetrics(reactor.netty.resources.ConnectionPoolMetrics) StandardCharsets(java.nio.charset.StandardCharsets) Executors(java.util.concurrent.Executors) CountDownLatch(java.util.concurrent.CountDownLatch) SSLException(javax.net.ssl.SSLException) AddressResolverGroup(io.netty.resolver.AddressResolverGroup) HttpServer(reactor.netty.http.server.HttpServer) LogLevel(io.netty.handler.logging.LogLevel) DefaultFullHttpResponse(io.netty.handler.codec.http.DefaultFullHttpResponse) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) SocketUtils(reactor.netty.SocketUtils) HttpProtocol(reactor.netty.http.HttpProtocol) Nullable(reactor.util.annotation.Nullable) ArrayList(java.util.ArrayList) InsecureTrustManagerFactory(io.netty.handler.ssl.util.InsecureTrustManagerFactory) SslProvider(reactor.netty.tcp.SslProvider) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) SslContext(io.netty.handler.ssl.SslContext) Files(java.nio.file.Files) Publisher(org.reactivestreams.Publisher) IOException(java.io.IOException) Mono(reactor.core.publisher.Mono) Field(java.lang.reflect.Field) Channel(io.netty.channel.Channel) AtomicLong(java.util.concurrent.atomic.AtomicLong) DefaultEventExecutor(io.netty.util.concurrent.DefaultEventExecutor) Flux(reactor.core.publisher.Flux) 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) DnsAddressResolverGroup(io.netty.resolver.dns.DnsAddressResolverGroup) Sinks(reactor.core.publisher.Sinks) SocketAddress(java.net.SocketAddress) Http11SslContextSpec(reactor.netty.http.Http11SslContextSpec) ByteBufAllocator(io.netty.buffer.ByteBufAllocator) URISyntaxException(java.net.URISyntaxException) BiFunction(java.util.function.BiFunction) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) ChannelId(io.netty.channel.ChannelId) Http2SslContextSpec(reactor.netty.http.Http2SslContextSpec) TimeoutException(java.util.concurrent.TimeoutException) BaseHttpTest(reactor.netty.BaseHttpTest) ByteBuffer(java.nio.ByteBuffer) Unpooled(io.netty.buffer.Unpooled) TransportConfig(reactor.netty.transport.TransportConfig) SocketChannel(java.nio.channels.SocketChannel) HttpResponseEncoder(io.netty.handler.codec.http.HttpResponseEncoder) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ByteBufFlux(reactor.netty.ByteBufFlux) NettyPipeline(reactor.netty.NettyPipeline) Logger(reactor.util.Logger) ByteBufMono(reactor.netty.ByteBufMono) URI(java.net.URI) ChannelDuplexHandler(io.netty.channel.ChannelDuplexHandler) ChannelGroup(io.netty.channel.group.ChannelGroup) ReadTimeoutHandler(io.netty.handler.timeout.ReadTimeoutHandler) StandardOpenOption(java.nio.file.StandardOpenOption) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HttpResponseStatus(io.netty.handler.codec.http.HttpResponseStatus) InetSocketAddress(java.net.InetSocketAddress) NioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) List(java.util.List) HttpVersion(io.netty.handler.codec.http.HttpVersion) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Tuple2(reactor.util.function.Tuple2) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) Queues(reactor.util.concurrent.Queues) 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) SelfSignedCertificate(io.netty.handler.ssl.util.SelfSignedCertificate) HttpMethod(io.netty.handler.codec.http.HttpMethod) CertificateException(java.security.cert.CertificateException) ServerSocketChannel(java.nio.channels.ServerSocketChannel) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) ConcurrentSkipListSet(java.util.concurrent.ConcurrentSkipListSet) TcpServer(reactor.netty.tcp.TcpServer) ChannelHandler(io.netty.channel.ChannelHandler) HttpContentDecompressor(io.netty.handler.codec.http.HttpContentDecompressor) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) DefaultEventExecutor(io.netty.util.concurrent.DefaultEventExecutor) CountDownLatch(java.util.concurrent.CountDownLatch) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) ChannelGroup(io.netty.channel.group.ChannelGroup) ConnectionProvider(reactor.netty.resources.ConnectionProvider) BaseHttpTest(reactor.netty.BaseHttpTest) Test(org.junit.jupiter.api.Test)

Example 7 with DefaultEventExecutor

use of io.netty.util.concurrent.DefaultEventExecutor in project reactor-netty by reactor.

the class TcpServerTests method testChannelGroupClosesAllConnections.

@Test
void testChannelGroupClosesAllConnections() throws Exception {
    ChannelGroup group = new DefaultChannelGroup(new DefaultEventExecutor());
    CountDownLatch latch1 = new CountDownLatch(1);
    CountDownLatch latch2 = new CountDownLatch(1);
    DisposableServer boundServer = TcpServer.create().port(0).doOnConnection(c -> {
        c.onDispose().subscribe(null, null, latch2::countDown);
        group.add(c.channel());
        latch1.countDown();
    }).wiretap(true).bindNow();
    TcpClient.create().remoteAddress(boundServer::address).wiretap(true).connect().subscribe();
    assertThat(latch1.await(30, TimeUnit.SECONDS)).as("latch await").isTrue();
    boundServer.disposeNow();
    FutureMono.from(group.close()).block(Duration.ofSeconds(30));
    assertThat(latch2.await(5, TimeUnit.SECONDS)).as("latch await").isTrue();
}
Also used : DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) DefaultEventExecutor(io.netty.util.concurrent.DefaultEventExecutor) DisposableServer(reactor.netty.DisposableServer) CountDownLatch(java.util.concurrent.CountDownLatch) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) ChannelGroup(io.netty.channel.group.ChannelGroup) Test(org.junit.jupiter.api.Test)

Example 8 with DefaultEventExecutor

use of io.netty.util.concurrent.DefaultEventExecutor in project reactor-netty by reactor.

the class TcpServerTests method testIssue688.

@Test
void testIssue688() throws Exception {
    CountDownLatch connected = new CountDownLatch(1);
    CountDownLatch configured = new CountDownLatch(1);
    CountDownLatch disconnected = new CountDownLatch(1);
    ChannelGroup group = new DefaultChannelGroup(new DefaultEventExecutor());
    DisposableServer server = TcpServer.create().port(0).childObserve((connection, newState) -> {
        if (newState == ConnectionObserver.State.CONNECTED) {
            group.add(connection.channel());
            connected.countDown();
        } else if (newState == ConnectionObserver.State.CONFIGURED) {
            configured.countDown();
        } else if (newState == ConnectionObserver.State.DISCONNECTING) {
            disconnected.countDown();
        }
    }).wiretap(true).bindNow();
    TcpClient.create().remoteAddress(server::address).wiretap(true).connect().subscribe();
    assertThat(connected.await(30, TimeUnit.SECONDS)).as("latch await").isTrue();
    assertThat(configured.await(30, TimeUnit.SECONDS)).as("latch await").isTrue();
    FutureMono.from(group.close()).block(Duration.ofSeconds(30));
    assertThat(disconnected.await(30, TimeUnit.SECONDS)).as("latch await").isTrue();
    server.disposeNow();
}
Also used : DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) DefaultEventExecutor(io.netty.util.concurrent.DefaultEventExecutor) DisposableServer(reactor.netty.DisposableServer) CountDownLatch(java.util.concurrent.CountDownLatch) DefaultChannelGroup(io.netty.channel.group.DefaultChannelGroup) ChannelGroup(io.netty.channel.group.ChannelGroup) Test(org.junit.jupiter.api.Test)

Aggregations

DefaultEventExecutor (io.netty.util.concurrent.DefaultEventExecutor)8 DefaultChannelGroup (io.netty.channel.group.DefaultChannelGroup)5 CountDownLatch (java.util.concurrent.CountDownLatch)5 Test (org.junit.jupiter.api.Test)5 ChannelGroup (io.netty.channel.group.ChannelGroup)4 NioEventLoopGroup (io.netty.channel.nio.NioEventLoopGroup)4 TimeUnit (java.util.concurrent.TimeUnit)4 DisposableServer (reactor.netty.DisposableServer)4 RedisURI (com.lambdaworks.redis.RedisURI)2 ByteArrayCodec (com.lambdaworks.redis.codec.ByteArrayCodec)2 Event (com.lambdaworks.redis.event.Event)2 EventBus (com.lambdaworks.redis.event.EventBus)2 DefaultClientResources (com.lambdaworks.redis.resource.DefaultClientResources)2 EventLoopGroupProvider (com.lambdaworks.redis.resource.EventLoopGroupProvider)2 ByteBuf (io.netty.buffer.ByteBuf)2 ByteBufAllocator (io.netty.buffer.ByteBufAllocator)2 Unpooled (io.netty.buffer.Unpooled)2 Channel (io.netty.channel.Channel)2 DomainSocketAddress (io.netty.channel.unix.DomainSocketAddress)2 HttpClientCodec (io.netty.handler.codec.http.HttpClientCodec)2