Home / Class/ SniClientJava8TestUtil Class — netty Architecture

SniClientJava8TestUtil Class — netty Architecture

Architecture documentation for the SniClientJava8TestUtil class in SniClientJava8TestUtil.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  25960dec_3844_5bbd_3083_848ea070caef["SniClientJava8TestUtil"]
  b26d2292_889b_aec4_10cf_88501f539099["SniClientJava8TestUtil.java"]
  25960dec_3844_5bbd_3083_848ea070caef -->|defined in| b26d2292_889b_aec4_10cf_88501f539099
  6c0dcf4a_72f0_d4fa_656f_46a24d964782["SniClientJava8TestUtil()"]
  25960dec_3844_5bbd_3083_848ea070caef -->|method| 6c0dcf4a_72f0_d4fa_656f_46a24d964782
  75c3f3bc_b7dc_66da_afec_39001e55721e["testSniClient()"]
  25960dec_3844_5bbd_3083_848ea070caef -->|method| 75c3f3bc_b7dc_66da_afec_39001e55721e
  9ca4cda7_1660_5ecb_777f_e15c90a21b7f["assertSSLSession()"]
  25960dec_3844_5bbd_3083_848ea070caef -->|method| 9ca4cda7_1660_5ecb_777f_e15c90a21b7f
  6f311a48_e6cc_8776_114c_ab1b7baaa41b["TrustManagerFactory()"]
  25960dec_3844_5bbd_3083_848ea070caef -->|method| 6f311a48_e6cc_8776_114c_ab1b7baaa41b
  86227cee_7e5a_5a57_a651_a59222fa026e["KeyManagerFactory()"]
  25960dec_3844_5bbd_3083_848ea070caef -->|method| 86227cee_7e5a_5a57_a651_a59222fa026e

Relationship Graph

Source Code

handler/src/test/java/io/netty/handler/ssl/SniClientJava8TestUtil.java lines 78–347

final class SniClientJava8TestUtil {

    private SniClientJava8TestUtil() { }

    static void testSniClient(SslProvider sslClientProvider, SslProvider sslServerProvider, final boolean match)
            throws Exception {
        final String sniHost = "sni.netty.io";
        SelfSignedCertificate cert = CachedSelfSignedCertificate.getCachedCertificate();
        LocalAddress address = new LocalAddress("test");
        EventLoopGroup group = new MultiThreadIoEventLoopGroup(1, LocalIoHandler.newFactory());
        SslContext sslServerContext = null;
        SslContext sslClientContext = null;

        Channel sc = null;
        Channel cc = null;
        try {
            sslServerContext = SslContextBuilder.forServer(cert.key(), cert.cert())
                    .sslProvider(sslServerProvider).build();
            final Promise<Void> promise = group.next().newPromise();
            ServerBootstrap sb = new ServerBootstrap();

            final SslContext finalContext = sslServerContext;
            sc = sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<Channel>() {
                @Override
                protected void initChannel(Channel ch) throws Exception {
                    SslHandler handler = finalContext.newHandler(ch.alloc());
                    SSLParameters parameters = handler.engine().getSSLParameters();
                    SNIMatcher matcher = new SNIMatcher(0) {
                        @Override
                        public boolean matches(SNIServerName sniServerName) {
                            return match;
                        }
                    };
                    parameters.setSNIMatchers(Collections.singleton(matcher));
                    handler.engine().setSSLParameters(parameters);

                    ch.pipeline().addFirst(handler);
                    ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                        @Override
                        public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                            if (evt instanceof SslHandshakeCompletionEvent) {
                                SslHandshakeCompletionEvent event = (SslHandshakeCompletionEvent) evt;
                                if (match) {
                                    if (event.isSuccess()) {
                                        promise.setSuccess(null);
                                    } else {
                                        promise.setFailure(event.cause());
                                    }
                                } else {
                                    if (event.isSuccess()) {
                                        promise.setFailure(new AssertionError("expected SSLException"));
                                    } else {
                                        Throwable cause = event.cause();
                                        if (cause instanceof SSLException) {
                                            promise.setSuccess(null);
                                        } else {
                                            promise.setFailure(
                                                    new AssertionError("cause not of type SSLException: " + cause));
                                        }
                                    }
                                }
                            }
                        }
                    });
                }
            }).bind(address).syncUninterruptibly().channel();

            sslClientContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE)
                    .sslProvider(sslClientProvider).build();

            SslHandler sslHandler = new SslHandler(
                    sslClientContext.newEngine(ByteBufAllocator.DEFAULT, sniHost, -1));
            Bootstrap cb = new Bootstrap();
            cc = cb.group(group).channel(LocalChannel.class).handler(sslHandler)
                    .connect(address).syncUninterruptibly().channel();

            promise.syncUninterruptibly();
            sslHandler.handshakeFuture().syncUninterruptibly();
        } finally {
            if (cc != null) {
                cc.close().syncUninterruptibly();

Frequently Asked Questions

What is the SniClientJava8TestUtil class?
SniClientJava8TestUtil is a class in the netty codebase, defined in handler/src/test/java/io/netty/handler/ssl/SniClientJava8TestUtil.java.
Where is SniClientJava8TestUtil defined?
SniClientJava8TestUtil is defined in handler/src/test/java/io/netty/handler/ssl/SniClientJava8TestUtil.java at line 78.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free