Search in sources :

Example 31 with LocalAddress

use of io.netty.channel.local.LocalAddress in project netty by netty.

the class RenegotiateTest method testRenegotiateServer.

@Test(timeout = 30000)
public void testRenegotiateServer() throws Throwable {
    final AtomicReference<Throwable> error = new AtomicReference<Throwable>();
    final CountDownLatch latch = new CountDownLatch(2);
    SelfSignedCertificate cert = new SelfSignedCertificate();
    EventLoopGroup group = new LocalEventLoopGroup();
    try {
        final SslContext context = SslContextBuilder.forServer(cert.key(), cert.cert()).sslProvider(serverSslProvider()).build();
        initSslServerContext(context);
        ServerBootstrap sb = new ServerBootstrap();
        sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<Channel>() {

            @Override
            protected void initChannel(Channel ch) throws Exception {
                ch.pipeline().addLast(context.newHandler(ch.alloc()));
                ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {

                    private boolean renegotiate;

                    @Override
                    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                        ReferenceCountUtil.release(msg);
                    }

                    @Override
                    public void userEventTriggered(final ChannelHandlerContext ctx, Object evt) throws Exception {
                        if (!renegotiate && evt instanceof SslHandshakeCompletionEvent) {
                            SslHandshakeCompletionEvent event = (SslHandshakeCompletionEvent) evt;
                            if (event.isSuccess()) {
                                final SslHandler handler = ctx.pipeline().get(SslHandler.class);
                                renegotiate = true;
                                handler.renegotiate().addListener(new FutureListener<Channel>() {

                                    @Override
                                    public void operationComplete(Future<Channel> future) throws Exception {
                                        if (!future.isSuccess()) {
                                            error.compareAndSet(null, future.cause());
                                            latch.countDown();
                                            ctx.close();
                                        }
                                    }
                                });
                            } else {
                                error.compareAndSet(null, event.cause());
                                latch.countDown();
                                ctx.close();
                            }
                        }
                    }
                });
            }
        });
        Channel channel = sb.bind(new LocalAddress("test")).syncUninterruptibly().channel();
        final SslContext clientContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).sslProvider(SslProvider.JDK).build();
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group).channel(LocalChannel.class).handler(new ChannelInitializer<Channel>() {

            @Override
            protected void initChannel(Channel ch) throws Exception {
                ch.pipeline().addLast(clientContext.newHandler(ch.alloc()));
                ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {

                    @Override
                    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                        if (evt instanceof SslHandshakeCompletionEvent) {
                            SslHandshakeCompletionEvent event = (SslHandshakeCompletionEvent) evt;
                            if (!event.isSuccess()) {
                                error.compareAndSet(null, event.cause());
                                ctx.close();
                            }
                            latch.countDown();
                        }
                    }
                });
            }
        });
        Channel clientChannel = bootstrap.connect(channel.localAddress()).syncUninterruptibly().channel();
        latch.await();
        clientChannel.close().syncUninterruptibly();
        channel.close().syncUninterruptibly();
        Throwable cause = error.get();
        if (cause != null) {
            throw cause;
        }
    } finally {
        group.shutdownGracefully();
    }
}
Also used : SelfSignedCertificate(io.netty.handler.ssl.util.SelfSignedCertificate) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalAddress(io.netty.channel.local.LocalAddress) LocalChannel(io.netty.channel.local.LocalChannel) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Channel(io.netty.channel.Channel) LocalChannel(io.netty.channel.local.LocalChannel) AtomicReference(java.util.concurrent.atomic.AtomicReference) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) CountDownLatch(java.util.concurrent.CountDownLatch) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) EventLoopGroup(io.netty.channel.EventLoopGroup) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Bootstrap(io.netty.bootstrap.Bootstrap) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) ChannelInboundHandlerAdapter(io.netty.channel.ChannelInboundHandlerAdapter) Test(org.junit.Test)

Example 32 with LocalAddress

use of io.netty.channel.local.LocalAddress in project netty by netty.

the class AbstractChannelPoolMapTest method testMap.

@Test(expected = ConnectException.class)
public void testMap() throws Exception {
    EventLoopGroup group = new LocalEventLoopGroup();
    LocalAddress addr = new LocalAddress(LOCAL_ADDR_ID);
    final Bootstrap cb = new Bootstrap();
    cb.remoteAddress(addr);
    cb.group(group).channel(LocalChannel.class);
    AbstractChannelPoolMap<EventLoop, SimpleChannelPool> poolMap = new AbstractChannelPoolMap<EventLoop, SimpleChannelPool>() {

        @Override
        protected SimpleChannelPool newPool(EventLoop key) {
            return new SimpleChannelPool(cb.clone(key), new TestChannelPoolHandler());
        }
    };
    EventLoop loop = group.next();
    assertFalse(poolMap.iterator().hasNext());
    assertEquals(0, poolMap.size());
    SimpleChannelPool pool = poolMap.get(loop);
    assertEquals(1, poolMap.size());
    assertTrue(poolMap.iterator().hasNext());
    assertSame(pool, poolMap.get(loop));
    assertTrue(poolMap.remove(loop));
    assertFalse(poolMap.remove(loop));
    assertFalse(poolMap.iterator().hasNext());
    assertEquals(0, poolMap.size());
    pool.acquire().syncUninterruptibly();
}
Also used : EventLoopGroup(io.netty.channel.EventLoopGroup) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalAddress(io.netty.channel.local.LocalAddress) EventLoop(io.netty.channel.EventLoop) Bootstrap(io.netty.bootstrap.Bootstrap) Test(org.junit.Test)

Example 33 with LocalAddress

use of io.netty.channel.local.LocalAddress in project netty by netty.

the class FixedChannelPoolTest method testAcquireBoundQueue.

@Test(expected = IllegalStateException.class)
public void testAcquireBoundQueue() throws Exception {
    EventLoopGroup group = new LocalEventLoopGroup();
    LocalAddress addr = new LocalAddress(LOCAL_ADDR_ID);
    Bootstrap cb = new Bootstrap();
    cb.remoteAddress(addr);
    cb.group(group).channel(LocalChannel.class);
    ServerBootstrap sb = new ServerBootstrap();
    sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<LocalChannel>() {

        @Override
        public void initChannel(LocalChannel ch) throws Exception {
            ch.pipeline().addLast(new ChannelInboundHandlerAdapter());
        }
    });
    // Start server
    Channel sc = sb.bind(addr).syncUninterruptibly().channel();
    ChannelPoolHandler handler = new TestChannelPoolHandler();
    ChannelPool pool = new FixedChannelPool(cb, handler, 1, 1);
    Channel channel = pool.acquire().syncUninterruptibly().getNow();
    Future<Channel> future = pool.acquire();
    assertFalse(future.isDone());
    try {
        pool.acquire().syncUninterruptibly();
    } finally {
        sc.close().syncUninterruptibly();
        channel.close().syncUninterruptibly();
        group.shutdownGracefully();
    }
}
Also used : LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalAddress(io.netty.channel.local.LocalAddress) LocalChannel(io.netty.channel.local.LocalChannel) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Channel(io.netty.channel.Channel) LocalChannel(io.netty.channel.local.LocalChannel) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) TimeoutException(java.util.concurrent.TimeoutException) EventLoopGroup(io.netty.channel.EventLoopGroup) DefaultEventLoopGroup(io.netty.channel.DefaultEventLoopGroup) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Bootstrap(io.netty.bootstrap.Bootstrap) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) ChannelInboundHandlerAdapter(io.netty.channel.ChannelInboundHandlerAdapter) Test(org.junit.Test)

Example 34 with LocalAddress

use of io.netty.channel.local.LocalAddress in project netty by netty.

the class SimpleChannelPoolTest method testBoundedChannelPoolSegment.

@Test
public void testBoundedChannelPoolSegment() throws Exception {
    EventLoopGroup group = new LocalEventLoopGroup();
    LocalAddress addr = new LocalAddress(LOCAL_ADDR_ID);
    Bootstrap cb = new Bootstrap();
    cb.remoteAddress(addr);
    cb.group(group).channel(LocalChannel.class);
    ServerBootstrap sb = new ServerBootstrap();
    sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<LocalChannel>() {

        @Override
        public void initChannel(LocalChannel ch) throws Exception {
            ch.pipeline().addLast(new ChannelInboundHandlerAdapter());
        }
    });
    // Start server
    Channel sc = sb.bind(addr).sync().channel();
    CountingChannelPoolHandler handler = new CountingChannelPoolHandler();
    ChannelPool pool = new SimpleChannelPool(cb, handler, ChannelHealthChecker.ACTIVE) {

        private final Queue<Channel> queue = new LinkedBlockingQueue<Channel>(1);

        @Override
        protected Channel pollChannel() {
            return queue.poll();
        }

        @Override
        protected boolean offerChannel(Channel ch) {
            return queue.offer(ch);
        }
    };
    Channel channel = pool.acquire().sync().getNow();
    Channel channel2 = pool.acquire().sync().getNow();
    pool.release(channel).syncUninterruptibly().getNow();
    try {
        pool.release(channel2).syncUninterruptibly();
        fail();
    } catch (IllegalStateException e) {
    // expected
    }
    channel2.close().sync();
    assertEquals(2, handler.channelCount());
    assertEquals(0, handler.acquiredCount());
    assertEquals(1, handler.releasedCount());
    sc.close().sync();
    channel.close().sync();
    channel2.close().sync();
    group.shutdownGracefully();
}
Also used : LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalAddress(io.netty.channel.local.LocalAddress) LocalChannel(io.netty.channel.local.LocalChannel) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Channel(io.netty.channel.Channel) LocalChannel(io.netty.channel.local.LocalChannel) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) ExpectedException(org.junit.rules.ExpectedException) EventLoopGroup(io.netty.channel.EventLoopGroup) LocalEventLoopGroup(io.netty.channel.local.LocalEventLoopGroup) LocalServerChannel(io.netty.channel.local.LocalServerChannel) Bootstrap(io.netty.bootstrap.Bootstrap) ServerBootstrap(io.netty.bootstrap.ServerBootstrap) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Queue(java.util.Queue) ChannelInboundHandlerAdapter(io.netty.channel.ChannelInboundHandlerAdapter) Test(org.junit.Test)

Aggregations

LocalAddress (io.netty.channel.local.LocalAddress)34 Bootstrap (io.netty.bootstrap.Bootstrap)26 ServerBootstrap (io.netty.bootstrap.ServerBootstrap)25 LocalChannel (io.netty.channel.local.LocalChannel)24 Test (org.junit.Test)24 LocalServerChannel (io.netty.channel.local.LocalServerChannel)23 Channel (io.netty.channel.Channel)22 EventLoopGroup (io.netty.channel.EventLoopGroup)18 ChannelInboundHandlerAdapter (io.netty.channel.ChannelInboundHandlerAdapter)16 DefaultEventLoopGroup (io.netty.channel.DefaultEventLoopGroup)15 LocalEventLoopGroup (io.netty.channel.local.LocalEventLoopGroup)14 ChannelFuture (io.netty.channel.ChannelFuture)7 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)7 CountDownLatch (java.util.concurrent.CountDownLatch)6 TimeoutException (java.util.concurrent.TimeoutException)6 ClosedChannelException (java.nio.channels.ClosedChannelException)4 ChannelPipeline (io.netty.channel.ChannelPipeline)3 NioEventLoopGroup (io.netty.channel.nio.NioEventLoopGroup)3 SelfSignedCertificate (io.netty.handler.ssl.util.SelfSignedCertificate)3 InetSocketAddress (java.net.InetSocketAddress)3